linux下cron定时任务的总结
cron是linux系統下一個自動執行指定任務的程序,即包含“時間”、“路徑”、“自動執行腳本”等要素
當我們要增加全局性的計劃任務時,一種方式是直接修改/etc/crontab。但是,一般不建議這樣做,/etc/cron.d目錄就是為了解決這種問題而創建的。
每個用戶都會生成一個自動生成一個自己的crontab文件,一般位于/var/spool/cron目錄下
所以cron自動執行有三種方式
1.直接crontab -e編輯用戶目前的crontab ?
將45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart 寫入即可
2.將執行的任務以腳本的形式存放在/etc/cron.d下
3.直接將運行的程序寫在用戶的配置文件里邊。
比如像讓root用戶執行一個cron任務
可以在/var/cron/tabs/目錄下邊創建一個文件root,將45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart 寫入root文件,保存退出即可
注意root是一個文件,不是目錄。
一、cron服務介紹
?????? cron把命令行保存在/etc/crontab文件里,每個系統用戶如果設置了自己的cron,那都會在/var/spool/cron下面有對應用戶名的crontab。無論編寫/var/spool/cron目錄內的文件還是/etc/crontab文件,都能讓cron準確無誤地執行安排的任務,區別是/var/spool/cron下各系統用戶的crontab文件是對應用戶級別的的任務配置,而/var/crontab文件則是對應系統級別的任務配置。cron服務器每分鐘讀取一次/var/crontab/cron目錄內的所有文件和/etc/crontab文件。
二、使用cron服務執行計劃任務
#service crond start/restart/stop
啟動/重啟/關閉cron服務
#crontab -l
瀏覽當前用戶的crontab,即瀏覽已存在的計劃任務列表
#crontab -e
編輯當前用戶crontab,如之前從未編輯過crontab文件,那么crontab是一個空白文件,我們可以完全手工編寫我們所需要的計劃任務列表,下面詳細介紹計劃任務列表的寫法。
以下是幾個例子:
1)9 9 * * * /usr/local/bin/cvsb
2)3 3 * * 0 /usr/local/bin/qbbak
3)* */6 * * * /usr/local/bin/esbbak
4)20,30 * * * /usr/local/bin/esbak
5)* 23 * * 2-5 /usr/local/bin/esbbak
六個字段對應的含義如下:
? 9 ? ? ??? 9??????? *????? ? *????? ? *
分鐘???? 小時?? 日期?? 月份??? 星期
1)表示每天早上9點9分執行目錄/usr/local/bin/中的cvsb文件
2)表示每周日凌晨3時3分執行目錄/usr/local/bin中的qbbak文件
3)表示每6小時執行一次,執行時間從第一次執行起計算,當然也可以自定義執行時間,比如0 */6 * * *那程序就會在整點執行
4)表示在每小時20分和30分時執行
5)表示在星期二到星期五每天的23點執行
上面簡單介紹了cron的一些基本用法,這個東東的時間組合可不是一般的強~可以復雜到你無法想象,我們只要掌握少許基本就可以滿足日常需求了。
三、cron進階使用
1.避免cron產生垃圾文件
細心的朋友可能會發現系統/var/spool/clientmqueue/目錄下往往存有大量文件,原因是系統中有用戶開啟了cron,而cron中執行的程序有輸出內容,輸出內容會以郵件形式發給cron的用戶,而sendmail(系統自帶的郵件服務器)沒有啟動所以就產生了這些文件。
這時可以使用輸出重定向,即在計劃任務后加上> /dev/null 2>&1
例:
9 9 * * * /usr/local/bin/cvsb > /dev/null 2>&1
2>&1:把錯誤重定向到輸出要送到的地方。
把命令的執行結果重定向到/dev/null,即把產生的錯誤拋棄。
??????
2.一種經常碰到的情況,需要執行的文件沒問題,但通過cron就是死活不能正確執行,這時我們可以通過輸出重定向將cron的執行過程輸出到一個文件,通過分析執行過程來尋找錯誤的原因
例:
9 9 * * * /usr/local/bin/cvsb > /var/log/crontab_log 2>&1
上例將cron的執行過程輸出到一個文本文件crontab_log,這個文件可以隨便手動建一個,放在哪都行,重定向目錄寫對就Ok。
網上查詢到的資料crontab不執行的問題:
第一,腳本的原因:大多數情況下,我們要相信科學,相信計算機,不是有鬼,就是我們的腳本的問題,這種問題導致crontab不能執行的概率占到 70%以上。因為程序執行到某一步導致crontab終止執行,我就碰到一次在遷移代碼的時候將數據庫連錯了。導致無法訪問而死在那里了。
第二,執行環境問題,當我們碰到第一情況下,一般都可以通過手動執行程序將問題扼殺在搖籃里,一般情況下高手是不應該犯第一種錯誤的。問題是當我們 手動執行成功而crontab不能執行的時候,筆者碰到一次就是執行環境的問題,例如相關路徑的設置問題。解決方案:在代碼最前面執行 source /home/user/.bash_profile
第三,系統時間不正確。這種問題最好理解,也是比較常見和隱蔽的問題,解決方案:date -s ********
第四,就是我們的腳本是否有可執行權限。必須保證執行腳本的用戶有執行改文件的權限。
第五,crontab 守護進程死掉了。這種情況是極少發生的,但也不排除,當我們實在是找不到其他原因的時候可以用。解決方案:重啟該進程。
第六,crontab不執行的問題困擾了好長時間,腳本寫的都正確,但是就是不執行,最終解決方法如下:
?? ??? ?crontab -u root /var/spool/cron/root
?? ??? ?這樣root用戶的crontab就生效了
?? ??? ?service crond restart
?? ??? ?重啟下服務就好了
第七,crond沒有啟動
第八,腳本編碼問題,腳本在window下編寫,傳到linux下后報“锘?!/bin/bash”,用vi編輯器新建新shell腳本,輸入內容后保存
總結
以上是生活随笔為你收集整理的linux下cron定时任务的总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 原神星银矿石多久刷新一次
- 下一篇: Linux中最常见命令总结