我对 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。