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