nohupとは何か?
nohupは「No Hang Up」の略で、切断信号(HUPシグナル)を無視してコマンドを実行するという意味です。通常、ターミナルウィンドウを閉じると実行中のプログラムも一緒に終了しますが、nohupを使用すると盾のようにこれを防ぎます。
3つの主要な概念
- HUPシグナルの無視: ユーザーがログアウトする際にシステムが送信する終了信号(SIGHUP)を無視し、プロセスを継続させます。
- nohup.out: 別途保存ファイルを指定しない場合、実行結果(出力内容)は自動的に`nohup.out`ファイルに保存されます。
- & (バックグラウンド): nohup単独ではターミナルを占有してしまいます。通常、コマンドの最後に`&`を付けてバックグラウンドに送ります。
主な構文とオプション (Shell)
nohup自体には複雑なオプションはありません。代わりに、**実行するコマンド**と**リダイレクション(出力方向の指定)**を組み合わせて使用します。
1. 基本的な実行構成
2. ログ(出力)管理
3. ヘルプ
生成されたコマンド:
コマンドを組み合わせてみてください。
説明:
`nohup` コマンドを実行します。
これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。
使用シナリオの例
実務で最もよく使われるnohupのパターンです。
最も基本的な使用法
nohup ./backup.sh &
スクリプトをバックグラウンドで実行します。出力は`nohup.out`に蓄積されます。
ログファイル名の指定 (推奨)
nohup python3 app.py > my-app.log 2>&1 &
`nohup.out`の代わりに`my-app.log`にログを保存します。`2>&1`はエラーメッセージも同じファイルに保存することを意味します。
ログなしで実行する
nohup ./heavy-task.sh > /dev/null 2>&1 &
出力内容が不要な場合や、多すぎてディスクがいっぱいになる恐れがある場合に、出力を`/dev/null`に破棄します。
実行中のnohupプロセスを見つける
ps -ef | grep app.py
`ps`コマンドで実行中のプロセスを確認します。
インストール
nohupは「GNU Coreutils」に含まれる基本コマンドであり、ほとんどすべてのLinuxディストリビューションにすでにインストールされています。
インストール確認
ほとんどの場合、別途インストールは不要です。以下のコマンドでインストール状況を確認できます。
バージョン確認
nohup --version
ヒントと注意事項
役立つヒント
- すでに実行中のタスクは?: nohupを忘れてそのまま実行してしまった場合、`Ctrl+z`で停止し、`bg`でバックグラウンドに切り替え、`disown -h %1`コマンドを使用するとnohupの効果を得られます。
- 終了方法: nohupで実行されたプロセスは`Ctrl+c`では停止しません。`ps -ef | grep [名前]`でPID(プロセスID)を見つけ、`kill -9 [PID]`コマンドで終了する必要があります。
- ディスク容量の注意: 長期間実行されるプログラムが`nohup.out`にログを書き続けると、ファイルが巨大化してサーバーが停止する可能性があります。定期的にクリアするか、`/dev/null`を使用してください。