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