nohupをpythonの前につけるとSSH切断後もPythonを実行したままにできる
nohup python test.py > /dev/null 2>&1 &
結論から言うとnohupをpythonの前につけて実行(この例ではtest.pyを実行しています)します。
> /dev/null 2>&1
は出力される標準出力を捨ててます。
こうするとターミナルに何も表示されなくなります。
ここから下は詳細を丁寧に説明しています。
ログアウトしたり、ターミナルを落とすとVPS上で動かしていたPythonプロセスも終了してしまう
test.pyというプログラムをバックグラウンド(&)で実行していてもターミナルを落とすとpythonのプロセスも終了してしまいます。
$ python test.py &
これはログアウト or ターミナル終了時(sshを抜ける時)にhupシグナルがプロセスをkillしてしまうからです。
hupシグナルとはハングアップシグナルのことです。
nohupコマンドを使うことでこれを避けることができます。
$ nohup python test.py &
ログを残したい場合
nohup python test.py > nohup.txt &
とするとnohup.txt に test.pyの実行結果が出力されます。
ログを残したくない場合
nohup python test.py > /dev/null 2>&1 &
/dev/null
は特殊なパスで、書き込まれたデータを全て捨てます。test.pyの実行結果は/dev/nullに書き込まれて削除されます。
2>&1 について
この数字はファイルディスクリプタといいます。
インターフェース | ファイルディスクリプタ |
標準入力 | 0 |
標準出力 | 1 |
標準エラー出力 | 2 |
表のような対応関係になっています。
nohup python test.py > /dev/null 2>&1 &
の意味は 標準エラー出力は標準出力として出力し、標準出力も標準エラー出力の両方ともに/dev/nullに捨てるという意味です。
コメント