如何排序 Cronjobs 以避免重叠或冲突

我在 ubuntu 系统上每 5 分钟为 python 脚本运行两个 cronjobs,两者都运行成功,但顺序不同。当我检查日志时,我发现有时第二个作业首先运行,有时在完成第一个作业之前触发第二个作业。有什么方法可以安排第二个作业在完成第一个作业后开始,并且两者都应该每 5 运行一次分钟。



*/5 * * * * cd path/to/script && /usr/bin/python3 comand.py -pgw y
*/5 * * * * cd path/to/script && /usr/bin/python3 comand.py -px y


繁花如伊
浏览 118回答 1
1回答

烙印99

尽管您在 crontab 中同时运行相同的脚本和两个不同的条目,但它们被视为两个不同的 cron 任务。不确定您使用的是什么操作系统。但 Ubuntu 的典型顺序是自上而下(并行),即假设您在 crontab 中定义了三个任务,如下所示:* * * * * T1* * * * * T2* * * * * T3T1 首先启动,然后是 T2(不等待 T1 完成),然后是 T3(不等待 T2 或 T1 完成)。Ubuntu 从 Debian 继承了这个顺序。但一般来说,这种行为可能会因 Linux 发行版或版本以及 cron 实现而异。依赖它是相同的确实没有意义。例如,在 FreeBSD 中,顺序是自下而上的。如果这些脚本相互依赖,最好按顺序调用它们,一个从另一个调用,或者从一个通用包装脚本调用,这是唯一一个 cron 实际执行的脚本。您看到的重叠日志可能是由于在两个任务中实际调用脚本之前第一个更改目录命令造成的。您可能想尝试指定脚本的绝对路径。*/5 * * * * /usr/bin/python3 /path/to/script/comand.py -pgw y*/5 * * * * /usr/bin/python3 /path/to/script/comand.py -px y另一种选择是创建一个类似这样的示例包装脚本并将其安排在 crontab 中。你可以自由修改。#!/bin/bash/usr/bin/python3 /path/to/script/comand.py -pgw y > /path/to/task1.log 2>&1 &TASK1_PID=$!echo "Task1 PID: $TASK1_PID Started"while ps -p $TASK1_PID; do sleep 1; done; echo "Task1 PID: $TASK1_PID Completed"/usr/bin/python3 /path/to/script/comand.py -pgw y > /path/to/task2.log 2>&1 &TASK2_PID=$!echo "Task2 PID: $TASK2_PID Started"while ps -p $TASK2_PID; do sleep 1; done; echo "Task2 PID: $TASK2_PID: Completed" 
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python