Ubuntu 12.04サーバーで常に実行したい非常に単純なPythonスクリプトがあります。upstart + monitの使用を考えました。問題は、これらのツールが私のような単純な人間にとってはかなり複雑に見え、Webで簡単な例を見つけることができないことです。
upstart + monitはやりすぎですか?誰かがより簡単な代替案、またはupstart + monitの優れたチュートリアルを知っていますか?スクリプトが常に実行されていることを確認したいだけの場合、monitは必要ですか?
Ubuntu 12.04サーバーで常に実行したい非常に単純なPythonスクリプトがあります。upstart + monitの使用を考えました。問題は、これらのツールが私のような単純な人間にとってはかなり複雑に見え、Webで簡単な例を見つけることができないことです。
upstart + monitはやりすぎですか?誰かがより簡単な代替案、またはupstart + monitの優れたチュートリアルを知っていますか?スクリプトが常に実行されていることを確認したいだけの場合、monitは必要ですか?
回答:
これを行う最も簡単な方法は、次の場所に配置することです/etc/init/something.conf。
start on runlevel [2345]
stop on runlevel [016]
respawn
exec python /path/to/your/script.py
Respawnは、強制終了された場合、またはゼロ以外で終了した場合(キャッチされない例外のように)起動します。これはUbuntu 10.04に戻って動作します。
12.04を使用している場合は、さらに豪華になります。上記はrootとしてスクリプトを実行します。12.04では、setuid / setgidを追加できます。
start on runlevel [2345]
stop on runlevel [016]
respawn
setuid nobody
setgid nogroup
exec python /path/to/your/python.py
利用可能なネットワークがないときにスクリプトが終了し、不安定なネットワーク接続でスクリプトを実行する予定がある場合は、それを修正して、生存/再試行を続ける必要があります。ただし、それができない場合は、ネットワークデバイスが起動したときに手動で起動する必要がある場合もあります。これを次の場所に配置できます/etc/network/if-up.d/yourscript(chmod + xで実行可能にします)
#!/bin/sh
exec start wait-for-state WAITER=$IFACE-yourscript WAIT_FOR=something
ここで、スクリプトはこの特定のスクリプトに任意で固有なものであり、「何か」はジョブ名と同じです(/etc/init/something.conf前述の提案など)。
upstart正しく使用していますか?これは、スクリプトが起動時にも開始されることを意味しますか(これはすばらしいでしょう)。そしてrespawn、セットアップする必要がないように十分monitですか?
                    昔からの通常のアプローチは、タイムスタンプまたはプロセスIDを含むファイルをに書き込んでから、/tmpこのプロセスIDがまだ実行されているかどうか、またはタイムスタンプがまだ最近かどうかを確認することでした。
またwhile [ 1 ]; do phyton-script.ph; done、スクリプトが戻った場合にスクリプトを再起動する単純な方法を実行することもできます。
より多くの可能性については、スクリプトの詳細情報を提供してください。特に、予期せず終了またはクラッシュすることが予想される理由について。