1

プロセスを継続的に監視する必要があり、プロセスIDを使用してプロセスを監視します。プロセスが停止したらメールを送信して手動でスケジュールを変更するプログラムを作成しましたが、プロセスのスケジュールを変更するのを忘れることがよくあります(基本的には別のPythonプログラム)。次に、apschedulerモジュールに出くわし、cronスタイルのスケジューリング(http://packages.python.org/APScheduler/cronschedule.html)を使用して、プロセスが停止したときにプロセスを生成しました。これで、プロセスのPIDが強制終了されるとプロセスを生成できますが、apschedulerを使用してプロセスを生成すると、新しくスケジュールされたプロセスのプロセスID(PID)を取得できません。したがって、プロセスを監視することはできません。スケジュールされたプロセスのプロセスIDを取得する関数がapschedulerにありますか?

4

1 に答える 1

3

pid を返すために APSchedule に頼る代わりに、プログラムに pid 自体を報告させてみませんか。デーモンが pidfiles を持つことは非常に一般的です。これは、実行中のプロセスの pid だけを含む既知の場所にあるファイルです。メイン関数を次のようにラップするだけです。

import os

try:
    with open("/tmp/myproc.pid") as pidfile:
        pidfile.write(str(os.getpid()))
    main()
finally:
    os.remove("/tmp/myproc.pid")

プロセスを監視したいときはいつでも、最初にpidファイルが存在することを確認し、存在する場合はプロセスのpidを取得してさらに監視することができます。これには、cron の特定の実装から独立しているという利点があり、ローカルでプログラムと対話するプログラムをさらに作成したい場合に、将来簡単になります。

于 2012-05-14T08:42:57.227 に答える