我读到了以下内容在单个 cron 作业中运行多个命令的 2 种方法:
我们可以在同一个 cron 作业中运行多个命令,并用分号 (;) 分隔它们。
* * * * * /path/to/command-1; /path/to/command-2
如果运行的命令相互依赖,我们可以在它们之间使用双与号(&&)。因此,如果第一个命令失败,则不会执行第二个命令。
* * * * * /path/to/command-1 && /path/to/command-2
我的要求是:
- 命令必须按顺序执行(等待当前命令完成后再执行下一个命令)
- 命令必须按照给定的顺序执行
- 但每个命令都应该执行,即使前一件事失败了
因此上面的链接没有说的是:
分号;
方法是否仍然保证命令将按给定的顺序顺序执行?
答案1
是的,在命令之间使用;
将保证所有命令都按顺序运行,一个接一个。一个命令的执行不依赖于前一个命令的退出状态。
正如 Paul_Pedant 所指出的在评论中,做任何比从 crontab 启动单个命令更复杂的事情,最好通过在单独的脚本中收集作业并计划该脚本来完成。这样,您就可以独立于 cron 来测试和调试脚本,尽管由于 cron 为您提供的环境与普通登录 shell 环境略有不同,但仍然存在环境因素(例如当前工作目录是什么以及$PATH
其他值是什么)变量等)要记住。