如何确定我的python脚本是否正在运行?

时间:2012-03-04 14:39:01

标签: python ubuntu-10.04

我的python脚本设置为在Ubuntu Server中从cron运行。但是,在另一个cron事件尝试启动之前,可能需要更长的时间才能完成。我想从脚本本身确定这样的情况,如果运行则优雅地从python脚本终止它。

3 个答案:

答案 0 :(得分:1)

将您的pid保存到文件中;如果文件已存在,请检查离开其PID的进程是否仍然存在。 (这比尝试确保始终删除文件更安全:您不能)。整个过程如下:

检查检查点文件是否存在。如果没有,请将PID写入文件并继续计算。

如果文件存在:读取PID并检查该过程实际上是否仍然存在。最好的方法是使用“kill -0”(来自python:os.kill),它不会打扰正在运行的进程,但如果它不存在则会失败。如果进程仍在运行,请退出。否则,将PID写入文件等。

竞争条件的可能性很小,但是如果你的进程在不经常的时间间隔重新启动,那应该是完全无害的:你的进程总是可以退出以支持稍后退出的运行进程,那么它是什么呢如果正在运行的进程先设法退出,那该问题呢?

答案 1 :(得分:0)

有两个明显的解决方案:

  1. 某种锁文件,它会检查。如果锁定文件存在,则不要启动,否则创建它。 (或者更确切地说,在真正的python'请求宽恕,而不是许可'的风格,尝试制作它并捕获错误,如果它存在 - 停止竞争条件)。您需要小心确保在脚本结束时清除它,但是 - 即使出现错误,否则它可能会阻止将来的运行。传统上,这是一个.pid文件,其中包含正在运行的进程的进程ID。

  2. 使用ps检查正在运行的进程。然而,通过这种解决方案,很难停止竞争条件。

答案 2 :(得分:0)

一个简单有效的解决方案是在crontab条目中执行以下操作:

ps -C myscript.py > /dev/null || /path/to/myscript.py