所謂的計劃任務自認爲就是服務器天天都有訪問壓力大的時候和壓力小的時候,而根據咱們的平常維護所得出通常服務器夜裏壓力比較小,而咱們好比在執行大的操做的時候必需要避開服務器業務高峯和服務器壓力過大的時候,因此咱們會選擇在夜裏作操做,而這些操做只是執行一條命令而已,咱們爲了咱們親身等到後半夜來執行命令,那麼咱們就用到了計劃任務的功能,計劃任務也就是一次性或者週期性執行的任務;那麼這樣linux就爲咱們準備了兩種計劃任務,一種是隻會執行一次at計劃任務和一種能夠週期性執行的cron計劃任務。linux
像一些作運維工做的,平時會有不少重複工做,如定點備份,按期重啓服務,上線服務,按期檢測等等,而這些任務有的須要在半夜進行,咱們若是再等到半夜去操做會很累,很繁瑣,因此咱們這個時候就要用到計劃任務了,只要咱們把計劃任務寫好,咱們就能夠喝喝茶,乾點其餘事情了,也就不須要熬夜加班了。shell
1.系統執行的工做:系統週期性所要執行的工做,如備份系統數據、清理緩存
2.我的執行的工做:某個用戶按期要作的工做,例如每隔10分鐘檢查郵件服務器是否有新信,這些工做可由每一個用戶自行設置。centos
經常使用語執行計劃任務的命令——at,batch,與週期性任務相關的命令crontabs.
1.at命令和batch命令的區別
at命令旨在特定的之間執行任務;batch命令設置的任務由系統選擇空閒時間去執行,空閒時間默認爲cpu利用率小於0.8的時候
2.at命令
at的任務是否能運行依賴於atd服務
咱們能夠先查看下atd服務是否運行
centos6:service atd status
centos7:systemctl status atd緩存
語法
at(選項)(參數)
選項
-f:指定包含具體指令的任務文件;
-q:指定新任務的隊列名稱;
-l:顯示待執行任務的列表;
-d:刪除指定的待執行任務;
-m:任務執行完成後向用戶發送E-mail。
實例
at命令後想要執行程序的確切時間,而後回車
接着在>後輸入你想要執行的命令,最後用Ctrl+d組合鍵退出at,像圖中它就會在16:54執行ls,而後把結果發給root,咱們能夠在/var/spool/mail/root中查看
咱們在時間後跟上tomorrow讓它在明天某個時間執行,或者跟上確切日期 17:04 04/04/2018 這就是讓它在2018年4月3日17:04執行
或者at now +10 minutes 十分鐘後執行
固然不止minutes這個關鍵詞可使用,下面的關鍵詞均可以使用
minutes:表示《分鐘》。bash
hours:表示《小時》。 days:表示《天》。 weeks:表示《星期》。 months:表示《月》。 years:表示《年》。
atq和atrm命令:列出和刪除正在等待執行的at任務
咱們每次使用at命令指定延時執行的命令,at都會給其分配一個job編號,好比上面的例子中咱們at任務編號就是4,下面我就給你們演示下具體如何操做
把任務刪除後就不會再去執行了。
咱們使用at -l 一樣能夠查看要延時執行的任務
at還有黑名單和白名單功能服務器
(黑名單):當僅/etc/at.deny 存在時(默認)寫入deny的用戶不能配置at
(白名單):當/etc/at.allow存在時/etc/at.deny失效,只有寫在allow中的用戶才能配置at
當/etc/at.allow及/etc/at.deny都不存在時,僅有root才能配置at
bath命令的用法和at類似,這裏就再也不介紹了。運維
2.crontab命令ide
以前咱們介紹了at命令,在這裏我就要跟你們介紹一個更強大的命令了,就是crontab,咱們使用at命令只能執行某個命令一次,而crontab卻能夠重複執行命令,例如:每分鐘,每小時,天天,每週等。centos7
crontab實際上是一個命令,用來讀取和修更名爲crontab的文件。這個crontab文件包含了你要定時執行的程序列表,也包含了執行的時刻。spa
實際上,有兩個命令,一個叫crontab,一個叫cron。crontab用於修改crontab文件,cron用於實際執行定時的程序。
有三個經常使用參數:
-e:修改crontab文件。-l:顯示crontab文件。-r:刪除crontab文件
/etc/crontab 系統級計劃任務的主配置文件
僅能經過 root定義,不過能夠以普通用戶的身份去執行計劃任務中的命令。
內容以下:
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/# For details see man 4 crontabs# Example of job definition:# .---------------- minute (0 - 59)# | .------------- hour (0 - 23)# | | .---------- day of month (1 - 31)# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat# | | | | |# * * * * * user-name command to be executed
前四行是用來配置crond任務運行的環境變量,第一行SHELL變量指定了系統要使用哪一個shell,這裏是bash,第二行PATH變量指定了系統執行命令的路徑,第三行MAILTO變量指定了crond的任務執行信息將經過電子郵件發送給root用戶,若是MAILTO變量的值爲空,則表示不發送任務執行信息給用戶,第四行的HOME變量指定了在執行命令或者腳本時使用的主目錄。
下面的註釋則是配置文件格式,以及每個※所對應的含義。
在這裏我就跟你們詳細介紹下每一段的定義:
第一段應該定義的是:分鐘,表示每一個小時的第幾分鐘來執行。範圍是從0-59
第二段應該定義的是:小時,表示從第幾個小時來執行,範圍是從0-23
第三段應該定義的是:日期,表示從每月的第幾天執行,範圍從1-31
第四段應該定義的是:月,表示每一年的第幾個月來執行,範圍從1-12
第五段應該定義的是:周,表示每週的第幾天執行,範圍從0-6,其中 0表示星期日。
每六段應該定義的是:用戶名,也就是執行程序要經過哪一個用戶來執行,這個通常能夠省略;
第七段應該定義的是:執行的命令和參數。
咱們在文件的最後一行添加內容如:5 * * * * ls
就是指定每小時的第5分鐘執行一次ls命令
咱們也能夠在指令前添加用戶:0 */2 * * * user1 ls
指定每兩個小時以user1身份執行一次ls
咱們也能夠寫一些天天要執行的腳本文件放在一個目錄下:30 5 * * * root run-parts /etc/cron.daily
指定天天的 5:30 執行/etc/cron.daily目錄下的全部可執行文件(若是要單獨執行某個腳本須要把run-parts,後面跟上腳本名就能夠了)
咱們須要記住幾個特殊符號的含義:
"*"表明取值範圍內的數字,
"/"表明"每",
"-"表明從某個數字到某個數字,
","分開幾個離散的數字
那麼在每週一至週五的10:30開始,每隔2小時重複一次就是30 10-23/2 * * 1-5
PS:咱們每次修改完crontab都須要重啓服務才能生效。咱們制定的腳本也都要給加上執行權限,否則是沒法執行的。
重啓命令以下:
/etc/rc.d/init.d/crond restart #重啓
/etc/rc.d/init.d/crond reload #不中斷服務,從新載入配置咱們還有一種增長調度任務的方法就是:crontab -e 而後寫入相應的計劃任務,寫完後保存退出就能夠了,這種方法寫的調度任務是在/var/spool/cron下生成一個與此用戶同名的文件,此用戶的cron信息都記錄在這個文件中,這個文件是不能夠直接編輯的,只能夠用crontab -e 來編輯。PS:cron啓動後每過一份鍾讀一次這個文件,檢查是否要執行裏面的命令。所以此文件修改後不須要從新啓動cron服務。crontab -r 刪除所有計劃,不跟參數是刪除當前用戶的計劃,跟用戶名則是刪除某個用戶的計劃。