從報錯no crontab for user/ vi exit with status 1看crontab


問題描述: 啟動定時腳本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垃圾桶

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM