多个命令的执行顺序

多个命令的执行顺序

我对 Linux 比较陌生,正在开发一个用于计划备份的 CronTab。我想出了如何使用;and执行多个连续作业&&,但我不确定依赖关系如何影响序列。

我的 cron 工作如下所示:

# Every day at 0:00 (reboot server and do the hourly backup procedure).
0 0 * * * sh shutdown.sh && sh backup.sh ; sh nas.sh ; sh ftp.sh ; sh startup.sh        

我想要发生的是运行 shutdown.sh 并在成功时继续序列,但如果失败则取消它。我担心它只会跳过sh backup.sh,然后继续序列。

它会按预期工作吗?如果没有,类似的事情可能吗shutdown && (backup ; nas ; ftp ; startup)

答案1

为什么不使用一些您知道会起作用或失败的虚拟命令来测试它呢?

$ ls foo && echo ok1 ; echo ok2
ls: cannot access foo: No such file or directory
ok2

$ ls foo && (echo ok1 ; echo ok2)
ls: cannot access foo: No such file or directory

所以看来你的直觉是正确的,你需要第二种结构。


作为建议经过麦克塞夫,对于一般测试,您可以使用true(或:) 和false, 来代替ls不存在的文件。因此,

$ false && echo ok1 ; echo ok2
ok2

$ false && (echo ok1 ; echo ok2)

答案2

如果 shutdown.sh 真的重新启动你的服务器,我不认为其他命令会被执行?答案可能会被删除,但您可以阅读它,所以这里只是一些提示:将脚本放在自己的文件夹中并使用完整路径调用它们,cron 可能会在不同的文件夹中运行。使它们可执行并直接调用它们而无需 sh 也很好。将整个逻辑放在带有 if-else 的额外脚本中也是很好的编码。如果您担心 sh 被用作 shell,请使用 shebang。

相关内容