ターミナルを閉じてもコマンドを実行し続ける「nohup」コマンドの使い方

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(クーロン)」がありますが、両者の目的は異なります。

比較項目nohupcron
用途手動実行の継続定期実行の自動化
タイミング任意のタイミングで設定したスケジュール通り
ターミナル終了後継続関係なし

両者を組み合わせて使うことも可能です。例えば、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運用がより安定し、便利になります。

タイトルとURLをコピーしました