crontab 踩坑記錄

crontab是linux 下的定時工具
但是有很多坑

1. 第一個坑 crontab 命令中 %

如果原始命令中帶有 %
那麼很可能會執行失敗 因爲crontab中的%號有特殊含義 需要使用 轉義字符去轉義
例如 下面這個命令 手動執行時候好好的 在crontab中就會失敗 就是因爲% 已經兩次掉進坑裏面了 其實可以發現加了反斜槓的%好不加反斜槓的%在crontab 用vim編輯時候的顏色已經不一樣了

echo $(date +"%Y%m%d")

2. 第二個坑 crontab 命令忘了加換行符

每個crontab 中的指令需要換行符作爲結尾才能生效 所以千萬別忘了換行符

3. 第三個坑 crontab 的環境變量和當前路徑

crontab的環境變量可能和用戶的不太一樣 最好在crontab -e時候開頭用 PATH=“xxx” 和 SHELL = "xxx"指定
同樣 在命令裏面不要用相對路徑 要用絕對路徑 crontab執行時的當前路徑和我們shell裏面的不一樣

4. 第四個坑 crontab 的輸出

標準輸出 默認輸出到MTA 郵件裏面 控制檯看不到 所以要重定向到某個日誌文件中

5. 第五個坑 crontab 沒有日誌文件

那應該是在 系統日誌配置中默認沒有打開 找不到/var/log/cron.log
需要配置一下 參考下面的方案

  1. 剛開始懷疑是cron服務沒有啓動,遂執行:

sudo service cron status

發現cron服務是running的,排除;

  1. 繼而懷疑是任務文件創建後未能被系統及時get到,因而執行:

sudo service cron restart

重啓cron後問題依舊,排除;

  1. 於是進一步查看cron運行日誌(/var/log/cron.log),但是並未找到相關文件,原因是ubuntu默認沒有開cron日誌,執行命令:

sudo vim /etc/rsyslog.d/50-default.conf

找到cron.log相關行,將前面註釋符#去掉,保存退出,重啓rsyslog:

sudo service rsyslog restart

執行

less -10 /var/log/cron.log再次查看cron運行日誌,log出來了,

提示如下信息:

No MTA installed, discarding output

原因是cron把屏幕輸出都發送到email了,而當前環境並未安裝email server,於是系統報錯,解決方面就是不要直接向屏幕輸出內容,而是重定向到一個文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章