python - 每隔几分钟在 linux 机器上运行一个 python 脚本,前提是它还没有运行

标签 python linux ubuntu cron

我有一个 python 脚本,它必须每 3 分钟运行一次。该脚本运行一个进程虽然可以运行超过 10 分钟。因此我需要确保如果它已经在运行它不应该运行。我需要在没有任何数据库干扰的情况下执行此操作。 我使用的方法是通过 crontab 中的以下命令设置一个 cron。

*/3 * * * * sudo ps aux|grep -v grep|grep "python XMLProcessor.py"
|| cd /home/ubuntu/git/perpule-python-subscriber; sudo python XMLProcessor.py

运行流畅。但这里的问题是,偶尔,即使在进程结束后,命令 sudo ps aux|grep -v grep|grep "python XMLProcessor.py" 仍然会给出输出,因此python 脚本不运行。

请建议我更好的方法或纠正我正在使用的方法。感谢所有建议。

最佳答案

您使用的方法存在一些问题,因为 ps 会报告“意外情况”。你确定你的 python 程序有一个唯一的名字吗?会不会是存在竞争条件(它可以运行程序两次)?

这样做的典型方法是在进程开始时触摸一个文件,然后删除它和结束:

如果 [ ! -f.工作];然后 触摸.working &&\ python do_something.py &&\ rm.working fi

然后您可以通过检查该文件来检查它是否正常工作。但是,这种方法存在多个问题:如果进程崩溃会怎样?你应该删除触摸的文件吗?是否可以为每次可能的崩溃删除它?然后你需要添加超时,它开始变得复杂。

然后,正确且更安全的解决方案是使用某种服务器或工具来检查您的作业是否正在运行,如果没有则运行它。我用过luigi做类似的事情,它与 python 代码集成得很好,所以你可以试一试。

关于python - 每隔几分钟在 linux 机器上运行一个 python 脚本,前提是它还没有运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49797295/

相关文章:

python - 为什么 python 日志记录日志文件不按顺序?

c - 共享内存: segmentation fault core dumped

linux - 无法从主机 ping docker 容器

c - 错误1 :10: fatal error compilation error with the directories

C malloc 没有按我预期的方式工作

apache - 在 Ubuntu 12.04/14.04 LTS 上的 Apache 设置中是否默认忽略 .htaccess 文件?

python - 将配置模式添加到 Plotly.Py 离线 - 模式栏

Python 3.8 IDLE拒绝保存,CTRL+S产生换行符

ubuntu - 如何在 Ubuntu 上为 AMD Ryzen Mobile CPU 安装 opencl

python - Setuptools 包发现