每隔几分钟在linux机器上运行python脚本,前提是它尚未运行

每隔几分钟在linux机器上运行python脚本,前提是它尚未运行,python,linux,ubuntu,cron,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 X

我有一个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程序有唯一的名称吗?是否存在比赛条件(它可以运行程序两次)

执行此操作的一种典型方法是在流程开始时触摸文件,然后将其删除并在其结束时删除:

if[!-f.工作];然后
触摸、工作和\
python do_something.py&&\
rm.正在工作
fi

然后,您可以通过检查该文件来检查它是否工作。但是,这种方法存在多个问题:如果进程崩溃会发生什么?你应该删除被触摸的文件吗?是否有可能在每次可能发生的碰撞中都将其拆下?。然后你需要添加超时,它开始变得复杂


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

路易吉似乎很有趣。我能知道你用它干什么吗?这项任务与我的任务有何相似之处?我使用python代码将其用于数据库/文件系统备份。如果备份过程尚未运行,则每天都会启动备份过程(luigi检查)。如果当天生成了大量数据,则备份可能需要一整天以上的时间。我认为这是相似的,因为不管它是每天运行还是每分钟运行,luigi都会确保只运行一个作业实例。今天我浏览了luigi,但我无法确定如何确保运行第一个任务时的条件不满足,第二个(依赖)任务不会触发。有什么想法吗?你需要另一个的任务。task1需要在某些东西上运行(例如,存在一个文件),而tas2需要task1。看看