如果有人像我一样,曾经使用过 IBM 大型机批处理作业,那么你可能知道 CONTROL-M,这是一个不仅能按日期和时间安排作业的工具,还能根据基于其他作业成功或失败的条件
所以我想知道在 Linux 机器上是否可以使用 cron 服务器来实现这一点。我知道 cron 作业必须在特定日期和时间运行的唯一方法是,现在我想在其他 cron 作业链中运行。这样当一个作业完成时,另一个作业就会启动,等等。
有没有什么办法可以实现这个目的?
最好的,德米安
答案1
如果另一个命令失败则运行一个命令的标准方法是检查第一个命令的退出状态是否为成功以外的其他状态,如果是则运行。
以下是最近看到的一个 hacktastic 示例:
### Start SSH if it stops.
*/8 * * * * /usr/lib/nagios/plugins/check_ssh -p 22 10.0.0.34 > /dev/null || /etc/init.d/sshd restart
如果初始命令失败,上述命令将仅运行“/etc/init.d/sshd restart”命令。这正是您要找的。我猜想它只在那台主机上,因为它复制了几乎每个 shell 中都存在的简单条件语句。
如果您有一大堆“作业”,只有当第一个作业失败时才需要运行......那么只需将所有这些作业放在 shell 脚本中,并将初始命令放在 cron 中:
# Run my cool script if "somecommand" fails.
*/8 * * * * /usr/bin/somecommand || /home/foo/bin/mycoolscript.sh
对于 bash,内置的 && 和 || 就可以了。
答案2
或者你可以安装一个调度服务器:“job scheduler”是 Sourceforge 上的一个很好的 GPL 项目