【Linuxコマンド】nohup コマンドの使い方とよく使うオプション

概要

 
nohup コマンドは、HUP シグナルを無視するように設定して COMMAND を実行するためのコマンドです。
簡単に言うと、nohup コマンドを使うことで、ターミナルのセッションが切れてしまっても処理を継続することができる、ということです。
 

通常、SSH などのターミナルセッションを切断すると、サーバはそのターミナルで実行していたプロセスに対して
HUP(hang-up)シグナルを送り、プロセスを終了させようとします。
nohup を使うと、この HUP シグナルを無視するようにしてコマンドを実行するため、
回線切断後もサーバ上で処理を続行させることができます。
 

nohup を使うと、カレントディレクトリに nohup.out ファイルが作成され、
標準出力・標準エラー出力がそこへ追記(append)されます(リダイレクトした場合はその限りではありません)。
長時間実行するバッチ処理などのログとして利用されることが多いです。
 

フォーマット

 

nohup COMMAND [ARG]...
nohup OPTION

 

基本的には、実行したい COMMAND の前に nohup を付けて実行します。
バックグラウンドで動かしたい場合は、末尾に & を付けるのが一般的です。

標準出力・標準エラーを別ファイルにまとめたい場合は、シェルのリダイレクト機能(>2>&1)と併用します。

 

よく使うコマンド例

 

・hoge.sh をバックグラウンドかつ nohup で実行する

nohup /batch/hoge.sh &

/batch/hoge.sh を nohup 付きで実行し、末尾の & によってバックグラウンドジョブとして起動します。
SSH セッションを切断しても、サーバ上では hoge.sh の処理が継続されます。
出力はカレントディレクトリの nohup.out に追記されます。

 

・出力先を nohup.log に明示的にリダイレクトして実行する

nohup /batch/hoge.sh > nohup.log 2>&1 &

標準出力と標準エラーを nohup.log にまとめて出力する例です。
デフォルトの nohup.out ではなく、ジョブごとにログファイル名を分けたい場合に便利です。

 

・nice コマンドと連携してバックグラウンドで sh を実行する

nohup nice -n 19 ./batch/hoge.sh &

nohup と nice を組み合わせることで、優先度を下げて(CPU に優しく)なおかつセッション切断後も継続する形で実行できます。
長時間かかるバッチや集計処理など、「他の処理への影響を減らしつつ止まってほしくない」処理によく使うパターンです。

 

・nohup で実行中のログを tail で確認する

tail -f nohup.out

nohup 実行中の出力内容をリアルタイムに確認したい場合は、別のターミナルから
tail -f nohup.out でログを追いかけるのが定番です。
リダイレクトしている場合は、指定したログファイル名を tail します。

 

・nohup 単体で使う(ヘルプ表示など)

nohup --help

COMMAND を指定せずに OPTION のみを指定すると、ヘルプやバージョン情報を表示して終了します。
日常的にはあまり使いませんが、環境ごとの挙動を確認したい際に利用できます。

 




実務でのよくある使いどころ

 

・SSH セッションが切れても続いてほしい長時間バッチ
バックアップ、集計処理、レポート生成などの長時間ジョブを、
うっかり回線が切れたり、踏み台サーバからログアウトしたりしても続行させたい場合、
nohup コマンド & で実行しておくと安心です。
 

・cron で起動したバッチの冗長な保険として
通常は cron 実行であれば端末に紐付かないため HUP の問題は起きませんが、
人手による手動実行と統一した形にしておきたい場合、運用ルールとして nohup を付けるケースもあります。
 

・開発/検証環境での簡易デーモン化
しっかりしたサービスユニット(systemd)を用意する前の段階として、
検証用に nohup + バックグラウンドで簡易的に常駐させる、といった使い方もあります。
本番運用では systemd などによる管理を検討するのが一般的です。
 

・nice と組み合わせた「止まらない・邪魔しない」実行
nohup と nice を組み合わせることで、
「セッションが切れても止まらない」「他の処理の邪魔をしにくい」長時間ジョブとして実行できます。
バッチサーバや共有サーバでは、かなり実務的な組み合わせです。
 

nohup 自体はシンプルですが、HUP シグナルの扱いと、標準出力・標準エラーの出力先を意識して使うことがポイントです。
本格的な常駐プロセス管理には systemd などを使いつつ、
「とりあえずこの処理は落としたくない」という場面では nohup が手軽な選択肢になります。

 

オプション(よく使うオプションのみ)

 

short optionlong optiondescription
--helpnohup コマンドの使い方(ヘルプ)を表示して終了する
--versionnohup コマンドのバージョン情報を表示して終了する
 

ここでは、GNU coreutils に含まれる nohup コマンドで一般的に利用できる主なオプションだけを TablePress の表としてまとめている想定です。
実際に利用できるオプションや挙動は、ディストリビューションやバージョンによって異なる場合があるため、
本番環境で使用する前に man nohup で最新の仕様を確認してください。

ブログランキングに参加しています。クリックして応援していただけると嬉しいです。




人気ブログランキング


ブログランキング・にほんブログ村へ

にほんブログ村