1

我必须持续监控一个进程,并且我使用进程 ID 来监控该进程。我编写了一个程序,在进程停止后发送电子邮件,以便我手动重新安排它,但我经常忘记重新安排进程(基本上是另一个 python 程序)。然后我遇到了 apscheduler 模块,并使用 cron 样式调度 ( http://packages.python.org/APScheduler/cronschedule.html ) 在进程停止后生成进程。现在,一旦进程的 PID 被杀死,我就可以生成该进程,但是当我使用 apscheduler 生成它时,我无法获取新调度进程的进程 ID (PID);因此,我无法监控该过程。apscheduler 中是否有获取调度进程的进程 ID 的功能?

4

1 回答 1

3

与其依靠 APSchule 返回 pid,不如让您的程序报告 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 回答