1. ホーム
  2. python

[解決済み] Python スクリプトが実行されているかどうかを確認する

2022-09-04 02:17:04

質問

Web アプリの一部として python daemon を実行しています/ daemon が実行されているかどうかを (python を使って) すぐに確認し、もし実行されていなければ起動するにはどうすればよいですか?

私は、デーモンのクラッシュを修正するためにそのようにしたいので、スクリプトを手動で実行する必要はなく、呼び出されるとすぐに自動的に実行され、その後実行し続けるでしょう。

私のスクリプトが実行されているかどうかを(pythonを使用して)確認するにはどうすればよいですか?

どのように解決するのですか?

pidファイルをどこか(例: /tmp)に置いてください。そして、そのファイル内の PID が存在するかどうかを確認することで、プロセスが実行されているかどうかをチェックすることができます。きれいにシャットダウンしたらそのファイルを削除し、起動時に確認することを忘れないでください。

#/usr/bin/env python

import os
import sys

pid = str(os.getpid())
pidfile = "/tmp/mydaemon.pid"

if os.path.isfile(pidfile):
    print "%s already exists, exiting" % pidfile
    sys.exit()
file(pidfile, 'w').write(pid)
try:
    # Do some actual work here
finally:
    os.unlink(pidfile)

次に、/tmp/mydaemon.pid の内容が既存のプロセスであるかどうかを確認することで、プロセスが実行されているかどうかをチェックすることができます。Monit (前述) がこれをやってくれますし、ps からの戻りコードを使用してそれをチェックする簡単なシェルスクリプトを書くこともできます。

ps up `cat /tmp/mydaemon.pid ` >/dev/null && echo "Running" || echo "Not running"

追加クレジットとして、atexit モジュールを使って、 どんな状況でも (強制終了、例外発生など) プログラムがその pid ファイルをクリーンアップすることを 保証することができます。