nohupとは?Linuxでバックグラウンドジョブを継続実行する方法
nohup
は、Linuxでコマンドを端末の切断後も継続して実行するためのツールです。
通常、バックグラウンドジョブは端末が閉じられると停止しますが、nohup
を使用するとプロセスが中断されずに動き続けます。
これにより、ログアウト後も長時間実行する処理やサーバーアプリケーションを安定して稼働させることが可能です。
実行時はnohup コマンド &
の形式でバックグラウンドで動作させます。
nohupの基本概要
nohup
(ノーハップ)は、「no hang up」の略で、Unix系オペレーティングシステムにおいて、セッションが切断された後もコマンドやプロセスを継続して実行させるためのコマンドです。
通常、ターミナルセッションが終了すると、そのセッション内で実行されていたプロセスも終了してしまいます。
しかし、nohup
を使用することで、ログアウトやセッションの切断があっても指定したコマンドがバックグラウンドで実行され続けます。
主な用途としては、長時間実行されるスクリプトやプログラム、サーバーの起動、データのバックアップなどがあります。
nohup
は、標準出力や標準エラー出力を自動的にファイルにリダイレクトするため、実行中のログを記録することも容易です。
nohupの使用方法
nohup
の基本的な使用方法は非常にシンプルです。
以下に一般的な構文を示します。
nohup コマンド [引数] &
- コマンドの指定: 実行したいコマンドやスクリプトを指定します。
- 引数の追加: コマンドに必要な引数を追加します。
- バックグラウンド実行: 最後にアンパサンド
&
を付けることで、コマンドをバックグラウンドで実行します。
例:
nohup python3 myscript.py &
上記の例では、myscript.py
というPythonスクリプトをバックグラウンドで実行し、セッションが終了してもスクリプトの実行を継続させます。
出力の確認:
デフォルトでは、nohup
は標準出力と標準エラー出力をnohup.out
というファイルにリダイレクトします。
このファイルを確認することで、コマンドの実行状況やエラーメッセージを確認できます。
tail -f nohup.out
上記のコマンドを使用すると、nohup.out
ファイルの最新の出力をリアルタイムで監視することができます。
バックグラウンドジョブとの比較
nohup
は、他のバックグラウンドジョブの管理方法と比較して特有の利点を持っています。
以下の表に主なバックグラウンドジョブ管理方法との比較を示します。
特徴 / 方法 | nohup | & (バックグラウンド実行) | disown |
---|---|---|---|
セッション切断後の継続 | 継続可能 | 続行しない(デフォルトでは終了) | 続行可能(disown 後) |
標準出力のリダイレクト | 自動的にnohup.out に保存 | 手動でリダイレクトが必要 | disown 自体はリダイレクト不要 |
使用の簡便さ | 簡単にセッション継続を設定可能 | 簡単だが継続設定が別途必要 | 一度バックグラウンドに実行後に適用 |
プロセス管理 | nohup 単体でプロセスの継続を保証 | ジョブ管理が基本 | ジョブ管理後に継続を設定 |
&
を使用してバックグラウンドでコマンドを実行する場合、セッションが切断されるとプロセスも終了してしまいます。
一方で、disown
コマンドを併用することで、バックグラウンドプロセスをセッションから切り離すことができますが、この操作はnohup
のように一度に完結するものではありません。
nohup
はこれらの手順を簡略化し、セッション切断後もプロセスを継続させるための便利な方法です。
実践的な活用例
nohup
はさまざまなシナリオで活用されています。
以下にいくつかの実践的な活用例を紹介します。
- Webサーバーの起動:
nohup python3 -m http.server 8000 &
ローカル環境で簡易的なWebサーバーを起動し、セッションが切断されてもサーバーが継続して動作します。
- データバックアップスクリプトの実行:
nohup bash backup.sh &
定期的なデータバックアップを行うスクリプトを実行し、バックアップ処理が途中で中断されることを防ぎます。
- 長時間のデータ処理:
nohup python3 process_data.py > process.log 2>&1 &
大量のデータを処理するPythonスクリプトを実行し、その出力をprocess.log
に保存します。
これにより、処理中のログを後から確認することができます。
- リモートサーバーでのジョブ管理:
リモートサーバーにSSHで接続し、長時間実行されるジョブをnohup
で開始することで、SSHセッションが切断されてもジョブが継続して実行されます。
これらの例から分かるように、nohup
はサーバー管理やスクリプトの自動化、リモート作業など、多岐にわたる場面で有効に活用されています。
まとめ
この記事では、nohupの基本概要から使用方法、バックグラウンドジョブとの違い、具体的な活用事例まで詳しく説明しました。
nohupを活用することで、Linux環境におけるプロセス管理が一層効率的になります。
ぜひ、実際の業務やプロジェクトでnohupを試し、その利便性を実感してください。