除了其他答案外,尤其是@soulcake发布的链接:如果您安排了间隔太短的长时间运行的命令,cron将在第一个命令完成之前愉快地执行第二个命令(除非命令中实现了某种互斥体) 。
这通常会进一步降低原始命令的速度,导致另一个实例在之前的实例完成之前运行,等等。或者由于其他原因,这可能是不可取的。
防止这种情况的一般方法是在运行该命令的条件下使用防护措施,以确保先前的命令没有在运行。例如:
10 * * * * pgrep my_slow_command >/dev/null || /usr/local/bin/my_slow_command
确保pgrep运行时与命令的名称匹配,例如python脚本将python作为可执行文件的名称,这可能不够具体,并且您还必须与python的脚本名称匹配。
10 * * * * pgrep -f my_script.py || /usr/local/bin/my_script.py
(但是,不带-f选项的pgrep与bash脚本名称匹配)
如果由于某种原因而无法使用pgrep:
10 * * * * ps ax | grep [m]y_command || /usr/local/bin/my_command
方括号用于避免与grep命令本身匹配。