在Linux操做系統中,除了用戶即時執行的操做命令外,還能夠配置在指定的時間,指定的日期執行預先計劃的系統管理任務(如按期備份、按期採集檢測數據)。CentOS系統默認已安裝了at、cronie軟件包,經過atd和crond這兩個系統服務實現一次性、週期性計劃任務的功能,分別經過at、crontab命令進行計劃任務設置。shell
使用at命令設置的計劃任務只在指定的時間執行一次,前提是對應的系統服務atd必須已經運行。須要注意的事,計劃任務的時間,日期必須安排在當前系統時間以後,不然沒法正確的設置計劃任務。bash
使用at設置一次性計劃任務,須要檢查兩個配置:服務器
- 首先找尋 /etc/at.allow 這個文件,寫在這個文件中的使用者才能使用 at ,沒有在這個文件中的使用者則不能使用 at (即便沒有寫在 at.deny 當中);
- 若是 /etc/at.allow 不存在,就尋找 /etc/at.deny 這個文件,若寫在這個 at.deny 的使用者則不能使用 at ,而沒有在這個 at.deny 文件中的使用者,就可使用 at 咯;
- 若是兩個文件都不存在,那麼只有 root 可使用 at 這個指令。
經過這個說明,咱們知道 /etc/at.allow 是管理較爲嚴格的方式,而 /etc/at.deny 則較爲鬆散 (由於賬號沒有在該文件中, 就可以執行 at 了)。在通常的 distributions 當中,因爲假設系統上的全部用戶都是可信任的, 所以系統一般會保留一個空的 /etc/at.deny 文件,意思是容許全部人使用 at 指令的意思 。 不過,萬一你不但願有某些使用者使用 at 的話,將那個使用者的賬號寫入 /etc/at.deny 便可! 一個賬號寫一行。ssh
設置一次性任務的時候,在at命令行中依次指定執行任務的時間、日期做爲參數(若只指定時間則表示當天的時間,若只指定日期則表示該日期的檔期時間)確認後將進入「at>」提示符的任務編輯頁面,每行設置一條執行命令,能夠一次設置多條語句,最後按Ctrl+D組合鍵提交任務。ide
at指令操做的參數有:操作系統
[root@localhost ~]# date //查詢時間 Sun Sep 8 13:39:14 CST 2019 [root@localhost ~]# at 13:41 2019-9-8 //指定時間設置任務 at> pgrep -U root | wc -l > /tmp/ps.root //統計改時間點root用戶運行的進程數量,保存到/tmp/ps.root文件中 at> <EOT> //任務設置完畢後,按Ctrl+D組合鍵提交任務 job 3 at Sun Sep 8 13:41:00 2019 [root@localhost ~]# cat /tmp/ps.root 132 //時間事後,查看執行效果
[root@localhost ~]# at 22:00 2019-9-8 at> shutdown -h now at> <EOT> job 4 at Sun Sep 8 22:00:00 2019 //在2019年9月8號晚上22:00關閉系統
對於已經設置但還未執行的計劃任務,能夠經過「atq」命令進行查詢。可是已經執行過的at任務將不會顯示在列表中,以下:命令行
[root@localhost ~]# atq 4 Sun Sep 8 22:00:00 2019 a root
若要刪除指定編號的at任務,可使用「atrm」命令。刪除後的at任務將不會被執行,而且不會顯示在atq命令的顯示結果中,但已經執行過的任務沒法刪除。code
[root@localhost ~]# atq 4 Sun Sep 8 22:00:00 2019 a root [root@localhost ~]# atrm 4 //刪除第4條at計劃任務 [root@localhost ~]# atq
僅執行一次的工做調度:
其實 batch 是利用 at 來進行指令的下達啦!只是加入一些控制參數而已。這個 batch 神奇的地方在於:他會在 CPU 的工 做負載小於 0.8 的時候,才進行你所下達的工做任務啦! 那什麼是工做負載 0.8 呢?
這個工做負載的意思是: CPU 在單一時間點所 負責的工做數量。不是 CPU 的使用率。
可使用「uptime」命令,查看cpu的負載狀況!blog
使用crontab命令設置的計劃任務能夠按預設的週期重複執行,從而大大減輕設置重複性系統管理任務的操做。啓用週期性任務也有一個前提條件,即對應的系統服務crond必須運行。接口
crontab經過多個目錄和文件設置計劃任務,不一樣類型的任務由不一樣的配置文件來設置。
/etc/crontab文件中設置的是維護Linux操做系統所需的任務,Linux操做系統及相關程序在安裝時可自動設置,不建議用戶手動修改此文件。文件內容以下:
[root@localhost ~]# cat /etc/crontab SHELL=/bin/bash //使用哪一種shell接口 PATH=/sbin:/bin:/usr/sbin:/usr/bin //可執行文件搜尋路徑 MAILTO=root //若失敗,將email發送給root # 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
文件中包括設置shell環境、可執行路徑等變量的操做,以及每小時、天天、每個月須要制定的任務目錄。
根據 /etc/crontab配置文件中的設定,crond將按照不一樣的週期重複執行相應目錄中的任務腳本文件。
由用戶自行設置(使用crontab命令)的cron計劃任務會被保存到目錄/var/spool/cron中,文件名與用戶名相同。
crond守護進程會自動檢查/etc/crontab文件、/etc/cron.d目錄及/var/spool/cron目錄中的改動,若是發現有配置更改,他們就會被載入內存,因此當會被載入內存,因此當某個crontab文件改動後並不須要從新啓動,crond守護進程就可使設置生效。
用戶定義的設置,位於文件"/var/spool/cron/用戶名"。
設置用戶的週期性計劃任務列表主要經過crontab命令進行,結合不一樣的選項能夠完成不一樣的計劃任務管理操做。
經常使用的選項有:
- -e:編輯計劃任務列表;
- -u:制定所管理的計劃任務屬於哪一個用戶,默認是針對當前用戶,通常只有root用戶有權限使用此選項(用於編輯、刪除其餘用戶的計劃任務)。
- -l:列表顯示計劃任務;
- -r:刪除計劃任務列表。
執行「crontab -e」命令後,將打開計劃任務編輯界面(與vi中的操做相同)。經過該界面用戶能夠自行添加具體的任務配置,每行表明一個記錄。配置格式,如圖:
除了「*」號,還可使用一些特殊的符號:
- 減號「-」:能夠表示一個連續的時間範圍,如「1-4」表示整數一、二、三、4;
- 逗號「,」:能夠表示一個間隔的不連續的範圍,如:3,4,6,8;
- 斜槓符號「/」:能夠用來制定間隔頻率,如在日期字段中的「*/3」表示每隔3天;
[root@localhost ~]# crontab -e 50 7 * * * /usr/bin/systemctl start sshd //天天7點50自動開啓ssh服務 0 0 */5 * * /usr/bin/rm -rf /var/ftp/pub/* //每隔5天清空一次FTP服務器的公共目錄的數據
因各類計劃任務在執行時不須要用戶登陸,因此計劃任務配置記錄中的命令建議使用絕對路徑,以免因缺乏執行路徑和沒法執行命令的狀況。
crontab命令結合「-l」選項能夠查看當前用戶的計劃任務列表,對於root用戶來講,還能夠結合「-u」選項查看其它用戶的計劃任務。操做以下:
[root@localhost ~]# crontab -l //查看用戶root本身的計劃任務 50 7 * * * /usr/bin/systemctl start sshd 0 0 */5 * * /usr/bin/rm -rf /var/ftp/pub/* [root@localhost ~]# crontab -l -u lisi //查看用於lisi的計劃任務
當只須要刪除某一條計劃任務是,能夠經過「crontab -e」命令進行編輯;而若要清空某個用戶的全部計劃任務時,可使用「crontab -r」命令。
[root@localhost ~]# crontab -r //清空當前用戶設置的計劃任務 [root@localhost ~]# crontab -l no crontab for root
在設置用戶的crontab計劃任務的過程當中,因爲每一條記錄只能運行一條命令,難以完成更復雜的系統管理任務操做,所以在實際環境中,當須要按照固定週期運行一些操做複雜的任務時,一般是將相關命令編寫成腳本,而後在計劃任務配置中加載該腳本並執行。
因爲 anacron 默認會以一天、七天、一個月爲期去偵測系統未進行的 crontab 任務,所以對於某些特殊的使用環境很是有 幫助。 舉例來講,若是你的 Linux 主機是放在公司給同仁使用的,由於週末假日你們都不在因此也沒有必要打開, 所以你的 Linux 是週末都會關機兩天的。可是 crontab 大多在天天的凌晨以及週日的早上進行各項任務, 恰恰你又關機了,此時系統不少 crontab 的任務就沒法進行。 anacron 恰好能夠解決這個問題!
那麼 anacron 又是怎麼知道咱們的系統啥時關機的呢?這就得要使用 anacron 讀取的時間記錄文件 (timestamps) 了! anacron 會去分析如今的時間與時間記錄文件所記載的上次執行 anacron 的時間,二者比較後若發現有差別, 那就是在某些時刻沒 有進行 crontab 囉!此時 anacron 就會開始執行未進行的 crontab 任務了!
anacron指令經常使用的參數:
注意:
———————— 本文至此結束,感謝閱讀 ————————