SSH切断した後でもVPS上でPythonを実行したままにする方法

VPS

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 について
この数字はファイルディスクリプタといいます。
インターフェースファイルディスクリプタ
標準入力
標準出力
標準エラー出力

表のような対応関係になっています。

nohup python test.py > /dev/null 2>&1 &
の意味は 標準エラー出力は標準出力として出力し、標準出力も標準エラー出力の両方ともに/dev/nullに捨てるという意味です。
 

コメント