Cron

為什麼我不能使用 `` 在 crontab 中繼續一行?

  • August 23, 2020

acme-client(1) 手冊頁建議使用以下cron 條目:

~   *   *   *   *   acme-client example.com && \
   rcctl reload httpd

當我添加到crontab編輯時,我使用該語法時不會保存:

crontab: installing new crontab
"/tmp/crontab.nOryzjBTlv":22: bad minute
crontab: errors in crontab file, unable to install
Do you want to retry the same edit? 

但是如果我把它寫成一行就可以了:

~   *   *   *   *   acme-client example.com && \ rcctl reload httpd

為什麼\不允許繼續一行到下一行?

無法將單個命令行拆分為多行,例如 shell 的尾隨“\”

如果您這樣做,您將在下一段中找到上述聲明man 5 crontab。請注意以下來自 Ubuntu 20.04LTS。

“第六”欄位(該行的其餘部分)指定要執行的命令。該行的整個命令部分,直到換行符或 % 字元,都將由 /bin/sh 或 crontab 文件的 SHELL 變數中指定的 shell 執行。命令中的百分號 (%),除非用反斜杠 () 轉義,否則將更改為換行符,第一個 % 之後的所有數據將作為標準輸入發送到命令。無法將單個命令行拆分為多行,例如 shell 的尾隨“\”

來自https://man.openbsd.org/crontab.5

它說該行的其餘部分是命令欄位,它沒有說明命令如何跨越多行。您不應假定 crontab 與 shell 腳本具有相同的語法。

命令欄位(該行的其餘部分)是要執行的命令。該行的整個命令部分,直到換行符或 % 字元,將由 /bin/sh 或 crontab 的 SHELL 變數中指定的 shell 執行。命令中的百分號 (’%’),除非使用反斜杠 (’') 轉義,否則將更改為換行符,並且第一個 ‘%’ 之後的所有數據將作為標準輸入發送到命令。

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