如果我的 cron 表中有以下条目:
00 03 * * * /java_prog1.sh
00 5 * * * /java_prog2.sh
第一份工作通常需要 30 分钟左右才能完成。第二项工作大约需要10分钟。在某些特殊情况下,第一份工作需要两个多小时。
有没有办法可以配置这两个作业,以便在第一个作业仍在运行时第二个作业不会启动?
我见过几个使用类似工具的例子flock
但我认为集群在这里不适用,因为我并不想阻止同一个作业同时运行。如果前一项工作仍在运行,我试图阻止另一项工作开始。
只是在评论中已有的建议上添加一些内容。
放入开头java_prog1.sh
:
[ -f /var/run/java_prog1.sh.pid ] && exit
echo "$$" > /var/run/java_prog1.sh.pid
... everything else our script does ...
rm -f /var/run/java_prog1.sh.pid
然后在开始的时候java_prog2.sh
:
[ -f /var/run/java_prog1.sh.pid ] && exit
... the rest of your java_prog2.sh ...
Or:
if [ -f /var/run/java_prog1.sh.pid ]; then
kill -0 `cat /var/run/java_prog1.sh.pid` > /dev/null 2>&1 && exit
fi
... the rest of your java_prog2.sh ...
如果文件(可能包含第一个脚本中的 PID)存在,第一个脚本将立即退出。仅当文件存在并且该文件中具有 PID 的进程位于进程表中时,第二个进程才会退出(kill -0
如果确实如此,将返回 0)。
就实际的脚本编写而言,您可能需要进行一些尝试。这只是为了让您大致了解事情的进展。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)