問題描述: 啟動定時腳本check mac 機器與jenkins平台的連接
crontab -e */5 * * * * sh check.sh
:q退出后報錯形如:
為什么執行crontab命令出現的報錯是和vi相關呢?crontab背后是如何實現的?發現起初使用crontab並未真實理解,只是使用。
原因:
Google后,很多回答在說修改vim配置等,https://superuser.com/questions/359580/error-adding-cronjobs-in-mac-os-x-lion
詳解crontab
Linux系統會進行例行性檢查等,依托的是cron系統服務。用戶控制例行性工作調度使用crontab,核心利用的也是cron服務。
crontab權限控制 /etc/cron.allow /etc/cron.deny 工作調度記錄 /var/spool/cron #cron服務分鍾級別讀取 /etc/crontab #cron服務分鍾級別讀取 /var/log/cron #日志 crontab -e #實際執行 /usr/bin/crontab,寫入調度記錄文件
/etc/init.d/crondrestart #重啟crond服務
和vi有什么關系呢?關系是用戶新增的任務調度會被記錄到/var/spool/cron/[username]文件中(username必須先擁有權限,/etc/cron.allow和/etc/cron.deny中指定),此時vi出現,crontab默認調用vi打開文件。
出錯原因:
vim已替代了vi,機器上執行vi時一般是alias到vim,而crontab仍是調用vi,則顯示報錯。
最終解決方法:
最后是命令行下執行如下命令解決了問題。
alias crontab="VIM_CRONTAB=true /usr/bin/crontab"
附加:
這次還看到幾項使用crontab的注意事項也是之前沒有關注到的,記錄下。
- 資源分配
crontab配置例行性工作,若集中在相同的時間啟動,某個時間段機器會變得不堪重負,建議是划分開執行時間段。
- 取消不必要輸出選項
這一點是以前被忽略的。當有執行結果或者執行的選項中有輸出的數據時,該數據將會mail給MAILTO(/etc/crontab文件中指定),所以會導致一直發送郵件出來。若必須有輸出選項,則在配置時可指向 /dev/null垃圾桶