我正在運行 Ubuntu 21.10 并嘗試設定 crontab 任務。
我希望在任務開始之前將日期和時間列印到控制臺,所有這些都被記錄到日志檔案中。
這就是我目前所擁有的。
{ printf "\%(\%Y-\%m-\%d \%H:\%M:\%S)T Started Task\n"; <run task> } >> /path/to/log/file
當我輸入時,printf "%(%Y-%m-%d %H:%M:%S)T Started Task\n"我得到了預期的輸出:
2021-10-20 15:22:03 Started Task
但是,在 crontab 中,我知道您必須"%"使用\. 除非即使在轉義之后%我最終會出現錯誤:
/bin/sh: 1: printf: %(: invalid directive
無論如何嘗試格式化 crontab,我仍然會遇到相同的錯誤。
如果有人知道我做錯了什么,請幫助我,謝謝。
我的具體cronjob如下:
0 * * * * { printf "\%(\%Y-\%m-\%d \%H:\%M:\%S)T Updating Certs\n"; sudo certbot renew --post-hook "systemctl reload nginx.service postfix.service dovecot.service"; } >> /home/ubuntu/logs/certbot.log
uj5u.com熱心網友回復:
cron可能令人驚訝,因為它的默認 shell/bin/sh不是您的用戶 shell,而它的作業目錄不是$HOME.
在撰寫 crontab 時,您必須記住:
- 使用完整路徑幾乎是強制性的。
- 使用大括號對指令進行分組時
{ },必須在最后一條指令的末尾放置一個分號。 - 默認情況下
/bin/sh,printf可以僅限于 POSIX 功能(這意味著它不會理解%()T構造)。
也就是說,您可以通過以下方式/bin/sh實作自己的目的:
0 * * * * { date ' \%Y-\%m-\%d \%H:\%M:\%S Started Task'; <command>; } >> /full/path/to/log/file
一個完全不同的解決方案是更改您的 crontab 的外殼,就像Cyrus 的回答所暗示的那樣。
uj5u.com熱心網友回復:
您的 cronsh用作外殼。您的代碼(printf帶功能T)需要bash(版本 >= 4.2)。我建議在您的 cronjob 強制bash作為 shell之前在單獨的行中添加它。
SHELL=/bin/bash
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/329316.html
上一篇:為什么我在"snapshot.data.length"中得到錯誤?
下一篇:腳本卡在LXC初始化任務中
