crontab 安裝 crontab怎么配置



文章插圖
crontab 安裝 crontab怎么配置

文章插圖
linux系統提供at和crontab兩個命令來執行定時任務 , at主要針對一次性的定時任務 , crontab則執行周期性的定時任務 。在linux運維中使用較多的還是cronjob , 當安裝完linux系統后 , linux會自動啟動crond進程 , 這是周期性任務的守護進 程 , 用于檢查是否有需要執行的定時任務 。
crontab命令常用參數:crontab file [-u user] -用指定的文件替代目前的crontab.crontab -[-u user] -用標準輸入替代目前的crontab.crontab -l [user] -顯示當前存在的crontab任務 .crontab -e [user] -用于編輯創建crontab文件任務 .crontab -r [user] -刪除當前用戶crontab文件(文件保存路徑為/var/spool/cron/username) .crontab -c dir -指定crontab的目錄 。創建一個新的crontab文件
在考慮向cron進程提交一個crontab文件之前 , 首先要做的一件事情就是設置環境變量EDITOR 。cron進程根據它來確定使用哪個編輯器編輯crontab文件 。大多數用戶都使用vi , 如果你和小編一樣也是使用vi , 直接編輯$ HOME目錄下的. profile文件 , 在當中加入:
EDITOR=vi; export EDITOR ~ source .bash_profilecrontab命令時間格式設置
crontab任務字段共六個 , 前五個為時間字段分別為:分 時 日 月 周;第六個為執行命令字段 , 可以是單條命令或者腳本文件 。時間字段可以使用特殊字符 , ’*’代表所有可能值 , ’,’代表選定時間段 , ’-‘代表選定時間范圍 , ’/’代表時間間隔頻率 。
舉個例子:
? ~ crontab -l */1 10-14 24,25 * * echo `date` >> /root/date.log 含義為:每個月的24、25號10點到14點每隔一分鐘輸出一個date日期到/root/date.log文件中 。
? ~ crontab -l30 21 * * * /usr/local/etc/rc.d/lighttpd restart含義為:每晚的21:30重啟apache 。
基礎的設置和使用我們已經了解了 , 但是當我們創建完成cronjob任務后,卻經常發現crontab定時任務不執行 , 著實讓人郁悶!沒關系 , 往下看~
【crontab 安裝 crontab怎么配置】crontab定時任務不執行排查思路
兩個重要目錄文件
關于crontab任務 , 我們需要知道幾個目錄文件 。這些文件對于我們分析crontab定時任務不執行的原因非常有用 。
/var/log/cron , 用于記錄crontab任務執行日志的文件 , 不論執行成功與否都會被記錄 。/var/spool/mail/username , 用于記錄crontab任務執行失敗日志的文件 , linux系統中每個定時任務執行后 , 系統都會將 失敗的任務信息通過電子郵件的形式發送給當前系統用戶 。
執行失敗排查過程(舉例)
我創建一個定時任務每分鐘關閉一次iptables任務 , 但是iptables并未被關閉 。
查看日志 tail /var/spool/mail/root , 發現不存在這個service命令目錄 :
? ~ which service /usr/sbin/service ? ~ crontab -e */1 * * * * /usr/sbin/service iptables stop  , 即可解決這個問題 。這個例子反映了一個普遍存在的現象 , 當我們在當前shell中執行腳本沒有任何問題 , 但是一寫到cronjob中就會出現各種問題 , 這個是因為cronjob并不會自動加載我們腳本所需的各種環境變量 , 我們需要手動添加到cronjob任務中才能確保cronjob正常運行 。
解決辦法修改:
? ~ crontab -l SHELL=/bin/sh PATH=PATH=/sbin:/bin:/usr/sbin:/usr/bin */1 * * * * service iptables stop 對于python腳本或者mongodb腳本無法定時執行都可以采用這種辦法解決 。
其他容易忽略導致無法執行cronjob的原因:
定時任務路徑問題 , 在cronjob中最好使用絕對路徑來定位腳本或者輸出文件 。腳本權限問題 , 修改腳本權限 , 通常來說chmod 777即可 。系統時間問題 , 校準系統時間 。crond服務問題 , 確保服務狀態正常 , service crond status 。