はじめに
こんにちは!今回はnohupコマンドについて解説します。
nohupは、ターミナルを閉じた後もプロセスを実行し続けるコマンドです。長時間かかる処理をバックグラウンドで実行する時に便利ですね。
SSH接続を切った後も、サーバーでのタスク実行を続けたい時には欠かせませんよ!
nohupコマンドとは
nohupは、“no hang up"の略で、SIGHUPシグナルを無視して、プロセスを実行し続ける外部コマンドです。
通常、ターミナルを閉じるとそのターミナルで実行していたプロセスも終了してしまいます。しかし、nohupでコマンドを実行すると、ターミナルを閉じてもプロセスは実行を継続します。
バックアップやデータ処理など、時間のかかるタスクをサーバーで実行する時に重宝します。
基本構文
|
|
実行結果はnohup.outファイルに保存されます。
主なオプション
| オプション | 説明 |
|---|---|
| なし | 実行結果をnohup.outに保存 |
> ファイル |
実行結果を指定ファイルに保存 |
2>&1 |
標準エラーも標準出力にリダイレクト |
& |
バックグラウンド実行 |
使用例
例1: 基本的な使い方
|
|
実行結果:
|
|
プロセスをバックグラウンドで実行し、HUPシグナルを無視します。
例2: 出力をファイルに保存
|
|
実行結果:
|
|
スクリプトの実行結果をbackup.logに保存します。
例3: 長時間処理を実行
|
|
実行結果:
|
|
大量のファイルをアーカイブする処理を実行します。
例4: データベースダンプを実行
|
|
実行結果:
|
|
データベース全体をダンプして、バックアップを取ります。
例5: ログファイルの監視
|
|
実行結果:
|
|
ログファイルを継続的に監視します。
例6: Python スクリプトを実行
|
|
実行結果:
|
|
Pythonスクリプトをバックグラウンドで実行します。
例7: 複数プロセスを並列実行
|
|
実行結果:
|
|
複数のタスクを同時に実行します。
例8: 出力ファイルを確認
|
|
実行結果:
|
|
プロセスの実行ログを確認できます。
例9: プロセスの状態を確認
|
|
実行結果:
|
|
実行中のnohupプロセスを確認します。
例10: タスク完了後の出力を確認
|
|
実行結果:
|
|
完了メッセージを確認できます。
Tips・注意点
バックグラウンド実行は必須ではない
|
|
nohupは必ずしも&と一緒に使う必要はありませんが、通常はバックグラウンド実行します。
SSH接続を閉じる前に確認
|
|
バックグラウンドプロセスがきちんと起動してから接続を閉じましょう。
出力ファイルを明示的に指定
|
|
ログファイル名を明示的に指定する方が、後で管理しやすいです。
プロセスの出力をリダイレクト
|
|
出力が不要な場合は、/dev/nullにリダイレクトして、ログファイルが作られないようにできます。
実践的な使い方
リモートサーバーでのバックアップ実行
|
|
SSH接続を切った後も、バックアップが継続実行されます。
crontabの代わりに使用
|
|
スクリプトをcrontabに登録せず、手動で実行できます。
ログファイルの監視を継続
|
|
ターミナルを閉じた後も、ログの監視を続けることができます。
データ処理パイプライン
|
|
複雑なパイプラインを長時間実行できます。
まとめ
nohupコマンドのポイント:
- ターミナル切断後もプロセスを継続実行
- HUPシグナルを無視して実行を続ける
- 基本形:
nohup command > logfile 2>&1 & - 出力ファイルは明示的に指定するのが推奨
- SSH接続を切った後も長時間タスクが実行される
- よく使う組み合わせ:
nohup ./script.sh > log.txt 2>&1 &
リモートサーバーでの長時間処理に欠かせないコマンド。バックアップやデータ処理を安心して任せられますよ!