Ubuntuのupstart機能を使用してPythonスクリプトを実行しているので、何らかの理由でPythonスクリプトが停止または強制終了された場合、自動的に再起動できます。
そこで、UbuntuのUPSTART機能を使用してPythonスクリプトを自動的に再起動することにしました。
/etc/init/testing.conf
でこのようなtesting.confファイルを作成した後-
chdir /tekooz
exec python testing.py
respawn
Sudoコマンドの下で実行して開始しましたが、ps ax
を使用して実行されているプロセスと、pythonスクリプトも正常に実行されていることがわかります。
root@bx13:/tekooz# Sudo start testing
testing start/running, process 27794
これは私の以下ですpythonスクリプト-
#!/usr/bin/python
import time
while True:
print "Hello World"
time.sleep(5)
しかし、Pythonスクリプトが強制終了され、その後自動的に再起動されるかどうかを確認するためにテストするにはどうすればよいですか?PIDが変更され続けるため、PID
を強制終了できません。私のps ax
のtesting.py
。
このシナリオをテストする方法を誰かに教えてもらえますか?スクリプトが強制終了または停止した場合に、スクリプトを自動的に再起動できるようにしようとしています。
ただ走れ:
Sudo status testing
これにより、実行中のupstartサービスのステータスがわかります。
そして、tail -f /var/log/syslog
を使用すると、リスポーンしているかどうかを確認できます。
「HelloWorld」が行くのはどこにも行かないと思います。
以下でテストすることをお勧めします:
#!/usr/bin/python
import time
import os
with open('/var/tmp/testing.log', 'a') as fp:
try:
while True:
print >> fp, "Hello World", os.getpid()
fp.flush()
time.sleep(5)
except Exception as e:
print >> fp, 'exception', e
fp.flush()
raise
他のウィンドウでtail -f /var/tmp/testing.log
を実行します。
まず第一に、なぜPIDが変わるのですか?それは意味がありません。プロセスを強制終了してPIDの変更を確認した場合は、期待どおりに再起動されたことを意味します。スクリプトを強制終了していないのにPIDが変更された場合、スクリプトは何かによって強制終了され、再生成されます。
とにかく、あなたは名前で、PIDで殺すことができます(Sudo pkill testing.py
)または実行中のすべてのpythonプロセスを強制終了します(大幅ですが、実行中のプロセスが1つだけであると仮定すると問題ありません):Sudo killall python
。