[linux]解析crontab

linux提供了一個很是強大並且又比較好用的命令 [crontab]css

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

若是我要linux定時去執行某個腳本或者定時某個http請求,能夠用crontab來實現shell

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

默認狀況下,任何使用者只要不被列入 /etc/cron.deny 當中,那麼他就能夠直接下達『 crontab -e 』去編輯本身的例行性命令了!整個過程就如同上面提到的,會進入 vi 的編輯畫面, 而後以一個工做一行來編輯,編輯完畢以後輸入『 :wq 』儲存後離開 vi 就能夠了!服務器

若是你要每5分鐘運行數據同步的腳本,一樣能夠用crontab -e 而後編輯按照規定的格式寫便可.運維

白天是高峯期,晚上用戶很少,是低峯期,咱們補數據會佔用大量帶寬,尤爲是白天,會影響正常業務,通常的運維人員在對服務器有大的操做的時候都會實現吧腳本寫好,而後設定在凌晨的時候執行指定的腳本就能夠了.spa

crontab的語法rest

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

查詢目前的定時任務日誌

若是想刪除某一個crontab任務,就刪除某一行就能夠了code

/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
 每個月一、十、20日的3 : 30執行  30 3 1,10,20 * * command
 每週6、週日的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
相關文章
相關標籤/搜索