長時間かかるプロセスをnohupコマンドで実行する #448
今日は色々とトラブルが起き、その火消しで新しいことを学んだのでアウトプットします。
Linuxのnohupコマンドは、ターミナルからログアウトした後もプロセスを継続して実行させるために使用されるコマンドです。
これは特にリモートサーバーで長時間実行するプロセスやスクリプトを扱う場合に有用です。リモートサーバーだと一定時間でログアウトされてしまい、nohupなしだと長時間かかるスクリプトの実行ができないケースがあるためです。
nohupとは
"No Hang UP"の略で、シェルからログアウトしても指定したコマンドが「ハングアップシグナル」を受信しないようにするコマンドです。これにより、バックグラウンドでコマンドを安全に実行し続けることができます。
基本的な使い方
nohupコマンドの基本的な構文は以下の通りです。
nohup コマンド [引数] &
&はコマンドをバックグラウンドで実行するために使用されます。nohupは実行したコマンドの出力をnohup.outファイルにリダイレクトします。特定の出力ファイルにリダイレクトしたい場合は、リダイレクト(>)を使用して指定できます。
Pythonスクリプトの実行例
Pythonスクリプトをnohupで実行するには、次のようにコマンドを入力します。
nohup python スクリプト名.py &
例えば、script.pyというPythonスクリプトをバックグラウンドで実行し続けるには、以下のコマンドを使用します。
nohup python script.py &
このコマンドを実行すると、プロセスがバックグラウンドで開始され、nohup.outファイルに出力がリダイレクトされます。
出力を確認する
nohub.outは普通のテキストファイルなので、tailコマンド等で確認できます。
tail nohup.out
以下のように-f (--follow) オプションを付ければ、ファイルに新しい内容が追加された時にリアルタイムで表示し続けることができます。
tail -f nohup.out
出力をカスタマイズする
nohupの出力を特定のファイルにリダイレクトするには、次のようにコマンドを使用します。この場合、script.pyの出力はoutput.logに保存されます。
nohup python script.py > output.log &
標準エラーも同じファイルにリダイレクトしたい場合は、次のようにします。
nohup python script.py > output.log 2>&1 &
2>&1は標準エラー出力を標準出力にマージすることを意味します。
ここまでお読みいただきありがとうございました!
参考
この記事が気に入ったらサポートをしてみませんか?