Linux環境で長時間実行するスクリプトやプロセスを扱う際、ターミナルを閉じた瞬間に処理が中断されてしまった経験はありませんか?
そんなときに役立つのが「nohup
(ノーハップ)」というコマンドです。nohup
を使えば、ターミナルを閉じてもバックグラウンドでプロセスを継続させることができます。本記事では、nohup
の基本的な使い方から応用例まで、実際の使用例を交えてわかりやすく解説します。長時間の処理や自動化タスクを安定して実行したい方におすすめの内容です。
nohupとは何か?
nohup
は、「no hang up」の略で、LinuxやUnix系のOSに標準で搭載されているコマンドです。
通常、ターミナルを閉じると、そのターミナルで起動していたプロセスも一緒に終了してしまいます。しかし、nohup
を使ってコマンドを実行すると、ログアウト後もコマンドがバックグラウンドで動き続けます。
特徴
- ターミナル切断後も処理が継続される
- 標準出力と標準エラーはデフォルトで
nohup.out
に書き込まれる - 他のコマンドと組み合わせることで高い柔軟性がある
基本的な使い方
最もシンプルな使い方は以下のようになります。
nohup コマンド &
例:Pythonスクリプトをバックグラウンドで実行する
nohup python3 my_script.py &
このコマンドを実行すると、my_script.py
がバックグラウンドで動き続け、ログは自動的にnohup.out
に保存されます。
補足:&の意味
&
を付けることで、そのコマンドがバックグラウンドで実行され、即座にターミナルの操作が可能になります。
出力先を指定する方法
デフォルトではnohup
の出力はカレントディレクトリのnohup.out
にリダイレクトされますが、ログを別ファイルに保存したい場合は以下のように記述します。
nohup コマンド > out.log 2>&1 &
各記述の意味
>
:標準出力のリダイレクト2>&1
:標準エラー出力も標準出力と同じファイルにリダイレクト&
:バックグラウンド実行
例
nohup ./backup.sh > backup.log 2>&1 &
実行中のプロセスを確認するには?
バックグラウンドで動いているプロセスが本当に実行されているか確認したいときは、以下のコマンドを使います。
ps コマンドで確認
ps aux | grep コマンド名
jobs コマンド(同一セッション内)
jobs -l
※ただし、ターミナルを閉じるとjobs
では確認できません。
pgrep も便利
pgrep -fl コマンド名
プロセスの停止方法
nohup
で動かしたプロセスを止めたい場合は、kill
コマンドを使います。
kill プロセスID
まずはプロセスID(PID)を調べる必要があります。
ps aux | grep my_script.py
表示されたPIDを使って以下のように停止できます。
kill 12345
強制終了したい場合は-9
オプションを付けます。
kill -9 12345
cronとnohupの違い
nohup
と似たような用途で「cron(クーロン)」がありますが、両者の目的は異なります。
比較項目 | nohup | cron |
---|---|---|
用途 | 手動実行の継続 | 定期実行の自動化 |
タイミング | 任意のタイミングで | 設定したスケジュール通り |
ターミナル終了後 | 継続 | 関係なし |
両者を組み合わせて使うことも可能です。例えば、cronで毎日nohup
付きのコマンドを実行することで、定期的な処理をターミナルに依存せず行うことができます。
よくあるトラブルと対策
nohup: ignoring input and appending output to ‘nohup.out’
これは標準的なメッセージで、問題ありません。むしろ、きちんと動作しているサインです。
nohup.outが見つからない
コマンド実行時のカレントディレクトリにnohup.out
が作成されます。ログがどこにあるかわからなくなった場合は、以下で検索できます。
find /home/username -name nohup.out
実行権限のエラー
スクリプトやプログラムに実行権限が付いていない場合、以下のようなエラーが出ることがあります。
Permission denied
その場合は実行権限を付けましょう。
chmod +x script.sh
まとめ
nohup
コマンドは、ターミナルの接続状況に依存せずプロセスを継続実行したい場合に非常に便利なコマンドです。長時間実行する処理や、リモート接続で不安定なネットワーク環境での実行などにおいて、信頼性の高い選択肢となります。
最後にポイントまとめ
nohup
は「no hang up」の略で、ターミナル切断後もコマンドを継続実行できる- 出力はデフォルトで
nohup.out
に保存されるが、ファイル指定も可能 - バックグラウンド実行には
&
を併用 - プロセスの確認は
ps
,pgrep
, 停止はkill
を活用
習得しておくと、日々のLinux運用がより安定し、便利になります。