Linux計劃任務

一、什麼叫計劃任務

計劃任務,字面意思理解就是在約定好的時間執行已經計劃好的工作。在Linux中我們經常使用cron服務來完成這項工作。比如我們可以使用cron來做一個每天晚上12點備份一個日誌文件,這就是個計劃任務。

二、計劃任務的好處

像一些做運維工作的,平時會有很多重複工作,如定點備份,定期重啓服務,上線服務,定期檢測等等,而這些任務有的需要在半夜進行,我們如果再等到半夜去操作會很累,很繁瑣,所以我們這個時候就要用到計劃任務了,只要我們把計劃任務寫好,我們就可以喝喝茶,乾點其他事情了,也就不需要熬夜加班了。

三、計劃任務的類型

1.系統執行的工作:系統週期性所要執行的工作,如備份系統數據、清理緩存
2.個人執行的工作:某個用戶定期要做的工作,例如每隔10分鐘檢查郵件服務器是否有新信,這些工作可由每個用戶自行設置。

四、計劃任務的實現

常用語執行計劃任務的命令——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。
實例
Linux計劃任務
Linux計劃任務
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:表示《分鐘》。

hours:表示《小時》。

days:表示《天》。

weeks:表示《星期》。

months:表示《月》。

years:表示《年》。

atq和atrm命令:列出和刪除正在等待執行的at任務
我們每次使用at命令指定延時執行的命令,at都會給其分配一個job編號,比如上面的例子中我們at任務編號就是4,下面我就給大家演示下具體如何操作
Linux計劃任務
把任務刪除後就不會再去執行了。
我們使用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命令

之前我們介紹了at命令,在這裏我就要跟大家介紹一個更強大的命令了,就是crontab,我們使用at命令只能執行某個命令一次,而crontab卻可以重複執行命令,例如:每分鐘,每小時,每天,每週等。

crontab其實是一個命令,用來讀取和修改名爲crontab的文件。這個crontab文件包含了你要定時執行的程序列表,也包含了執行的時刻。

實際上,有兩個命令,一個叫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 刪除全部計劃,不跟參數是刪除當前用戶的計劃,跟用戶名則是刪除某個用戶的計劃。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章