web-dev-qa-db-ja.com

pythonスクリプトをバックグラウンドで実行し、クラッシュ時に再起動します

私は非常に単純なPythonスクリプトを持っており、ubuntu12.04サーバーで常に実行したいと思っています。upstart+ monitを使用することを考えました。問題は、これらのツールが単純なものとしてはかなり複雑に見えることです。私のような人間であり、ウェブ上で簡単な例を見つけることができません。

Upstart + monit overkillですか? /誰かがもっと簡単な代替案を知っていますか? /または良いチュートリアル?

5
sebpiq

この回答 から取得:

あなたはbashスクリプトを書くことができますmonitor.shこれは、pythonスクリプトを開始し、クラッシュした場合は再起動しますが、スクリプトが正常に終了した場合は再起動しません。

#!/bin/bash
until myscript.py; do
    echo "'myscript.py' crashed with exit code $?. Restarting..." >&2
    sleep 1
done

次に、モニタースクリプトをバックグラウンドで開始します。

Nohup monitor.sh &

Nohupの代わりに、バックグラウンドプロセスを実行するために tmux または screen を検討することもできます。

9
speakr

上記の答えは素晴らしいです。今のところコメントできませんので、ここで答えを改善してください。

「myscript」はpythonスクリプトであり、bash envで実行されていないため、関数を作成することもできます。

そう、

#!/bin/bash

myscript(){
    python3 myscript [args..]
}

until myscript; do
    echo "'myscript' crashed with exit code $?. Restarting..." >&2
    sleep 1
done

pythonまたはbashの新しい人は、この小さなことを知りません。彼らを助けるかもしれません。私は最初はそのような小さなことで苦労していました。他の人に知られたくないです!

1
Neil Agarwal