多個命令的執行順序

多個命令的執行順序

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

相關內容