[linux]解析crontab


linux提供了一個非常強大而且又比較好用的命令 [crontab]

crontab是Unix和Linux用於設置周期性被執行的指令,是互聯網很常用的技術,很多任務都會設置在crontab循環執行,

如果我要linux定時去執行某個腳本或者定時某個http請求,可以用crontab來實現

如下 我用cron去定時發送一個http請求

默認情況下,任何使用者只要不被列入 /etc/cron.deny 當中,那么他就可以直接下達『 crontab -e 』去編輯自己的例行性命令了!整個過程就如同上面提到的,會進入 vi 的編輯畫面, 然后以一個工作一行來編輯,編輯完畢之后輸入『 :wq 』儲存后離開 vi 就可以了!

如果你要每5分鍾運行數據同步的腳本,同樣可以用crontab -e 然后編輯按照規定的格式寫即可.

白天是高峰期,晚上用戶不多,是低峰期,我們補數據會占用大量帶寬,尤其是白天,會影響正常業務,一般的運維人員在對服務器有大的操作的時候都會實現吧腳本寫好,然后設定在凌晨的時候執行指定的腳本就可以了.

crontab的語法

crontab [-u username] [-l|-e|-r]
選項與參數:
-u  :只有 root 才能進行這個任務,亦即幫其他使用者創建/移除 crontab 工作排程;
-e  :編輯 crontab 的工作內容
-l  :查閱 crontab 的工作內容
-r  :移除所有的 crontab 的工作內容,若僅要移除一項,請用 -e 去編輯

查詢目前的定時任務

如果想刪除某一個crontab任務,就刪除某一行就可以了

/etc/crontab配置文件講解

我們可以看一看 linux中 /etc/crontab

前四行是用來配置crond任務運行的環境變量,第一行SHELL變量指定了系統要使用哪個shell,這里是bash,第二行PATH變量指定了系統執行命令的路徑,第三行MAILTO變量指定了crond的任務執行信息將通過電子郵件發送給root用戶,如果MAILTO變量的值為空,則表示不發送任務執行信息給用戶,第四行的HOME變量指定了在執行命令或者腳本時使用的主目錄。

 

crontab的格式講解

用戶所建立的crontab文件中,每一行都代表一項任務,每行的每個字段代表一項設置,它的格式共分為六個字段,前五段是時間設定段,第六段是要執行的命令段,格式如下:

minute   hour   day   month   week   command

其中:

minute: 表示分鍾,可以是從0到59之間的任何整數。

hour:表示小時,可以是從0到23之間的任何整數。

day:表示日期,可以是從1到31之間的任何整數。

month:表示月份,可以是從1到12之間的任何整數。

week:表示星期幾,可以是從0到7之間的任何整數,這里的0或7代表星期日。

command:要執行的命令,可以是系統命令,也可以是自己編寫的腳本文件。

上圖已經表示很明確了. 每個*代表的意義..

在這里還有一點是需要注意的是幾個特殊的符號含義  

 特殊字符  代表含義
 *(星號)  代表任何時刻都接受的意思,*代表的是任何時候
 ,(逗號)

 代表分隔字段的意思

例如: 15,30,45 * * * * command 代表的是每月每日每小時的15分,30分,45分的時候執行命令

-(減號) 

 代表一段時間范圍內

例如: 10 7-10 * * * command 代表的是每月每日的7點到10點的10分整時執行命令

 /n  

 那個 n 代表數字,也就是每隔 n 單位間隔的意思

例如 /5 * * * * command 代表的是每月每日每時每個5分鍾執行一次

 

 

 

 

 

 

 

 

 

 

 

crontab的原理

當使用者使用 crontab 這個命令來創建工作排程之后,該項工作就會被紀錄到 /var/spool/cron/ 里面去了,而且是以帳號來作為判別的喔!舉例來說, css使用 crontab 后, 他的工作會被紀錄到 /var/spool/cron/css 中,但請注意,不要使用 vi 直接編輯該文件, 因為可能由於輸入語法錯誤,會導致無法運行 cron 喔!另外, cron 運行的每一項工作都會被紀錄到 /var/log/cron 這個登錄檔中.

 crond服務的最低偵測限制是分鍾,所以 cron 會每分鍾去讀取一次 /etc/crontab 與 /var/spool/cron 里面的數據內容 ,因此,只要你編輯完 /etc/crontab 這個文件,並且將他儲存之后,那么 cron 的配置就自動的會來運行了,

如果你修改完的crontab或者添加的crontab沒有馬上的執行起來,那么你可以用 service crond restart 來重啟.

看看/etc/下的所有cron的目錄

特別注意的是

/etc/cron.deny  該文件中所列用戶不允許使用crontab命令

/etc/cron.allow  該文件中所列用戶允許使用crontab命令

最好是對crontab命令進行備份,因為 crontab -e 和crontab -r 中一個是寫入 一個是刪除,而e和r又相離很近,所以要注意這一點,很容易誤刪crontab這個文件.

 

舉幾個實例吧,這樣方便大家能夠更加容易的了解

 實例  
 每1分鍾執行一次 

 * * * * * command 

/1 * * * * command

 每小時的第15,30,45分鍾執行  15,30,45 * * * * command
 7點到10點的第10,50分鍾執行  10,50 7-10 * * * command
 每隔一天的7點到11點的第20和第40分鍾執行  20,40 7-11 */1 * * command
 每周一的7點到11點的第25和第50分鍾執行 25,50 7-11 * * 1 command
 每天的3:30執行  30 3 * * * command
 每月1、10、20日的3 : 30執行  30 3 1,10,20 * * command
 每周六、周日的3 : 30執行

 30 3 * * 6,0 command

30 3 * * 6,7 command

 每天9點到16點之間每隔15分鍾執行  /15 9-16 * * * command

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

& 后台執行命令

* * * * * command &

當在前台運行某個作業時,終端被該作業占據;而在后台運行作業時,它不會占據終端。可以使用&命令把作業放到后台執行。在后台運行作業時要當心:需要用戶交互的命令不要放在后台執行,因為這樣你的機器就會在那里傻等。

可以把輸出接口放到某一個溫江中

2>&1表示所有的標准輸出和錯誤輸出都將被重定向到一個叫做log.file 的文件中

command >log.file 2>&1 &

 

CentOS下查看crontab執行歷史記錄

在crontab中添加了定時任務,但發現沒有得到期望的結果,因而懷疑是crontab沒有執行相應的任務,這是我們可以查看一下日志

cd /var/log

tail -100 cron


免責聲明!

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



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