cron 中的多个连续命令

Ben*_*rel 8 cron

我读到了以下两种在单个 cron 作业中运行多个命令的方法

我们可以在同一个 cron 作业中运行多个命令,并用分号 (;) 分隔它们。

* * * * * /path/to/command-1; /path/to/command-2
Run Code Online (Sandbox Code Playgroud)

如果运行的命令相互依赖,我们可以在它们之间使用双与号(&&)。因此,如果第一个命令失败,则不会执行第二个命令。

* * * * * /path/to/command-1 && /path/to/command-2
Run Code Online (Sandbox Code Playgroud)

我的要求是:

  • 命令必须按顺序执行(等待当前命令完成后再执行下一个命令)
  • 命令必须按照给定的顺序执行
  • 但每个命令都应该执行,即使前一个命令失败

因此上面的链接没有说的是:

分号;方法是否仍然保证命令将按给定的顺序顺序执行?

Kus*_*nda 9

是的,;在命令之间使用将保证所有命令都按顺序运行,一个接一个。一个命令的执行不依赖于前一个命令的退出状态。

正如 Paul_Pedant在 comments 中指出的那样,做任何比从 crontab 启动单个命令更复杂的事情,最好通过在单独的脚本中收集作业并安排该脚本来完成。这样,您就可以独立于 cron 来测试和调试脚本,尽管由于 cron 为您提供的环境与普通登录​​ shell 环境略有不同,但仍然存在环境因素(例如当前工作目录是什么以及其他值是什么$PATH)变量等)要记住。

  • 我通过惨痛的经验了解到,将命令放入脚本中,只需将脚本名称放入 crontab 中,就可以节省您数小时的痛苦。特别是,cron 可能不会运行您认为的 shell:单独的脚本可以使用 shebang 来强制执行特定的 shell,它可以记录内容,可以独立测试。 (2认同)
  • 必须同意@Paul_Pedant。已经浪费了一两个小时来调试 crontab 中“date +%Y%m%d”的用法。提示:% 有特殊含义。 (2认同)