我倾向于将所有长时间运行的命令包装在一个屏幕中,并且cron
仅当尚未运行一个命令时才开始启动屏幕。
所以下面的行 crontab
*/2 * * * * /bin/bash /path/to/LongRunningScript.bash
...变成这样的东西:
*/2 * * * * /usr/bin/screen -S MyUniqueName -Q select . || /usr/bin/screen -dmS MyUniqueName /bin/bash /path/to/LongRunningScript.bash
我喜欢它,因为它还使您有机会附加到正在运行的脚本并检查其输出/状态。
在您的方案中,您可以cron
在执行构建之前先检查另一个屏幕,例如
0 3 * * * /usr/bin/screen -S ManualBuild -Q select . || /usr/bin/screen -dmS AutomatedBuild /bin/bash /path/to/BuildScripts.bash
10 3 * * * /usr/bin/screen -S ManualBuild -Q select . || /usr/bin/screen -dmS OtherAutomatedBuild /bin/bash /path/to/OtherBuildScripts.bash
当您运行手动构建时,只需screen
在运行脚本之前跳到第一个即可(如果需要提示如何连接/断开连接,请添加注释screen
。这是一个有用的实用程序-如果尚未开始使用,请试一下)
键入screen -S ManualBuild
,然后单击[enter]
并运行您要运行的任何命令。
注意:如果使用提供的示例,cron
则如果您正在运行多个屏幕会话且名称为“ ManualBuild”,则可能会造成混淆。
[the build] can run into conflicts with from jobs that are tipically safe to run at those times
?是否有在构建期间无法运行的非构建作业?所有工作是否相互排斥?还是只考虑构建?