Bash

如何正確安排使用“at”(atd)安排任務的任務?或如何在 bash 中正確引用/轉義

  • December 15, 2018

我正在尋找一種使用“at”(atd)創建命令行來安排任務的方法,該方法安排任務在重新啟動後執行“更多工作”(一次任務)。我現在正在尋找的是一種讓它飛起來的方法,只是將“按”計劃連結在一起。

我的問題是,我在 bash 中的引用/轉義迷失了方向。

到目前為止,我得到的以及對手動執行有效的是:

echo "somecommand -someOptions 2>&1 | mail -s \"$HOST after reboot: somecommand -someOptions\" my.mail@address.com" | at now +5 minutes ;\
#do admin stuff before reboot in less than 5 mins here ;\
touch /fastboot ; reboot

如前所述,效果很好。我現在想將整個內容封裝到另一個新的“AT”命令中,以便可以將以前的命令行安排到特定的開始時間,而不再需要手動執行。

我認為必須可以將整個內容封裝/包含到另一個“at”命令中,所以我想了解如何正確引用/轉義它以便它可以工作。

我試過這個(不工作):

echo "echo \"somecommand -someOptions 2>&1 | mail -s \\"$HOST after reboot: somecommand -someOptions\\" my.mail@address.com\" | at now +5 minutes ;\
#do admin stuff before reboot in less than 5 mins here ;\
touch /fastboot ; reboot ; " | at now + 1 minute

我看到它安排了 2 個作業,在重新啟動和重新啟動之前執行管理工作,但是我猜想,由於一些錯誤的引用/轉義,第二個(稍後)作業被打亂/崩潰。我想了解和了解更多關於這裡發生的事情以及我在逃跑時做錯的地方。我想我可以在外部使用單引號,因為在這種情況下我不需要任何變數擴展,但假設我也想在那裡使用變數擴展。在那種情況下,我應該如何正確地轉義/引用這個東西?

當你寫\\"which should be時,你忘了反斜杠雙引號\\\"。但是您可以通過使用第三種類型的 shell 引用,即 here-document 來避免這種情況:

at now + 1 minute <<\!
echo "somecommand -someOptions 2>&1 | mail -s \"$HOST after reboot: somecommand -someOptions\" my.mail@address.com" | at now +5 minutes
#do admin stuff before reboot in less than 5 mins here
touch /fastboot ; reboot
!

將您想做的事情包裝在一個腳本中(bash, perl, …)。調試腳本。告訴at執行腳本:

at now + 5
/home/user/bin/doit
^D

引用自:https://unix.stackexchange.com/questions/328453