![透過 cronjob 命令將時間戳記加入到日誌檔案中](https://rvso.com/image/36009/%E9%80%8F%E9%81%8E%20cronjob%20%E5%91%BD%E4%BB%A4%E5%B0%87%E6%99%82%E9%96%93%E6%88%B3%E8%A8%98%E5%8A%A0%E5%85%A5%E5%88%B0%E6%97%A5%E8%AA%8C%E6%AA%94%E6%A1%88%E4%B8%AD.png)
我嘗試運行 git pull 命令,並每 5 分鐘將輸出訊息記錄到檔案中。
但我遇到這樣的錯誤,
(root) CMD (cd /var/www/sites/ && git pull origin master | sed -e "s/^/$(date +\")
(CRON) error (grandchild #1111 failed with exit status 2)
我的 cronjob 指令如下。
*/5 * * * * cd /var/www/site/ && git pull origin master | sed -e "s/^/$(date +\"%d-%m-%y\ %T\"), /" >> /var/log/crond/site.log
如何修復它?
答案1
注意,對於某些系統,a%
在 crontab 中是特殊的:來自我係統上的 crontab(5)
「第六」欄位(該行的其餘部分)指定要執行的命令。該行的整個命令部分(直到換行符或“%”字元)將由 /bin/sh 或 cronfile 的 SHELL 變數中指定的 shell 執行。 命令中的“%”字符,除非用反斜線(\)轉義,否則將被更改為換行符,並且第一個 % 之後的所有資料將作為標準輸入發送到命令。
我強烈地推薦使用日期格式%Y-%m-%d
—不僅如此一個標準,它按詞彙和時間順序排序相同。一些 strftime 實作有一個簡寫:%F
查看您的系統是否有ts
命令
cd /dir && git pull origin master 2>&1 | ts "\%F \%T" >> /var/log/crond/site.log
要獲得「即時」時間戳,您可能必須取消緩衝命令:(開始變得非常難看)
cd /dir && stdbuf -oL sh -c 'git pull origin master 2>&1' | ts "\%F \%T" >> /var/log/crond/site.log