nohup は、コマンドを SIGHUP(ハングアップ)無視で実行し、ログアウトや端末切断後も処理を継続させるためのユーティリティです。
端末向きの入出力を自動でファイルへ退避するため、長時間バッチやリモート実行に向きます。
構文(Syntax)
nohup COMMAND [ARG...]
# 実運用ではたいてい &(バックグラウンド化)と併用
nohup COMMAND [ARG...] &
# 代表的なリダイレクトの組み合わせ
nohup COMMAND </dev/null >nohup.out 2>&1 &
- 標準入力が端末なら
/dev/nullに、標準出力が端末ならnohup.out(カレント or$HOME/nohup.out)へ、標準エラーが端末なら標準出力へ自動リダイレクトされます(追記)。 - パイプライン全体を保護したい場合は、
sh -c '…'など 1コマンドに包むのが確実です。
主なオプション一覧
nohup は基本的に オプションなしで使います(GNU 版は --help, --version を持ちます)。
| オプション | 説明 | 使用例 |
|---|---|---|
| (なし) | SIGHUP を無視してコマンドを実行 | nohup ./job.sh & |
--help | ヘルプを表示(GNU) | nohup --help |
--version | バージョン表示(GNU) | nohup --version |
実行例
基本:長時間ジョブを切断耐性つきで起動
説明: バックグラウンドで実行し、出力は nohup.out に追記されます。
コマンド:
nohup ./long_task.sh &
tail -f nohup.out
出力例(起動時メッセージの一例):
nohup: ignoring input and appending output to 'nohup.out'
ログファイルを明示して管理しやすく
説明: 標準出力/エラーを自前のログにまとめます。
コマンド:
nohup ./server --port 8080 > /var/log/myserver.log 2>&1 &
パイプライン全体を保護する
説明: そのまま nohup cmd1 | cmd2 だと cmd1 しか保護されないため、sh -c で包みます。
コマンド:
nohup sh -c 'cmd1 | cmd2 | gzip > /data/archive.gz' > job.log 2>&1 &
入力を切って完全に端末から独立させる
説明: 端末からの入力を一切受けないよう明示します。
コマンド:
nohup python worker.py </dev/null >worker.log 2>&1 &
エラー例:nohup.out を作れない場所での実行
説明: カレントにも $HOME にも書けないと失敗します。
コマンド:
mkdir /tmp/ro && chmod 500 /tmp/ro && cd /tmp/ro
nohup echo hello
出力例(例):
nohup: failed to open 'nohup.out' for writing: Permission denied
関連コマンド
disown: シェルが送るSIGHUP対象からジョブを外す(Bash/Zsh)。setsid: 新しいセッションで実行(端末から切り離しを強化)。screen/tmux: デタッチ可能な仮想端末で長時間作業。systemd-run/daemon: サービス化やワンショット実行で確実に常駐。at/batch: 後で/負荷低時にジョブを実行。
備考
- 何をしているか: 実行するプロセスの SIGHUP/SIGQUIT を無視に設定し、必要に応じて入出力をファイルへ退避します。プログラム側が明示的にシグナル処理を上書きすれば、その挙動が優先されます。
- 出力先: 既定の
nohup.outは 追記で開かれます。カレントに作れない場合は$HOME/nohup.outを試みます。 - 端末入出力: 背景化(
&)しても、端末へ書き込むと表示が混ざることがあります。ログへリダイレクトしておくのが実運用の定石です。 - 完全なデタッチ:
nohupは「SIGHUP 無視」が主目的で、制御端末の切断や CWD の保持などは別問題です。確実にサービス化するならsystemdなどのプロセス管理を使いましょう。 - 移植性: POSIX に準拠。GNU/BSD/BusyBox で挙動は概ね同じですが、メッセージや細部の違いがあります。
参考
- manページ:
man 1 nohup(各ディストリ付属) - POSIX 仕様(nohup): https://pubs.opengroup.org/onlinepubs/9699919799/utilities/nohup.html
- GNU coreutils
nohupドキュメント: https://www.gnu.org/software/coreutils/manual/html_node/nohup-invocation.html - BusyBox
nohup(実装差の確認用): https://busybox.net/downloads/BusyBox.html

コメント