Linux常用命令(十一)計劃任務管理
Linux常用命令(十一)計劃任務管理
RHEL6系統中默認已安裝了at、cronie軟件包,通過atd和crond這兩個系統服務實現一次性、周期性計劃任務的功能,並分別通過at、crontab命令進行計劃任務設置。
一、at一次性任務設置
使用at命令設置計劃任務只在指定的時間點執行一次,前提是對應的系統服務atd必須已經運行。需要註意的是,計劃執行任務的時間、日期必須安排在當前系統的時刻之後,否則將無法正確設置計劃任務。比如現在是2017年,你要設置一個任務計劃在2016年執行就是肯定不行的。
設置一次性的計劃任務時,在at命令行中依次指定計劃執行任務的時間、日期作為參數(若只指定時間則表示當天的該時間,若只指定日期則表示該日期的當前時間)
例如,一下操作先通過date命令確認當前的系統時間,並設置在當天的5:15分自動執行在“/root”目錄下創建一個名為abc的空文件。並按Ctrl+D組合鍵提交,等時間到了到/root目錄下查看結果。
[[email protected] ~]# date 2017年 10月 13日星期五 05:10:56 CST [[email protected] ~]# at 05:15 at> touch /root/abc at>
查看結果如下,在/root下多了一個名為abc的文件。
[[email protected] ~]# date 2017年 10月 13日星期五 05:15:58 CST [[email protected] ~]# ls /root abc anaconda-ks.cfg install.log install.log.syslog
對於已經設置還未執行的(未到時間點)的任務計劃,可以通過atq命令進行查詢。但已經執行過的at任務將不會再出現在列表中。
例如,創建一個一會兒關機的計劃任務,使用atq命令查看。
[[email protected] ~]# at 05:30 at> shutdown -h now at> <EOT> job 3 at 2017-10-13 05:30 [[email protected] ~]# atq 3 2017-10-1305:30 a root
若要刪除指定編號的at任務,可以使用atrm命令。刪除後的at任務將不會被執行,並且不會顯示在atq命令的顯示結果中。但是,已經執行過的任務無法刪除。
[[email protected] ~]# atq 3 2017-10-1305:30 a root [[email protected] ~]# atrm 3 [[email protected] ~]# atq
二、crontab周期性任務設置
使用crontab命令設置計劃任務可以按預定設的周期重復執行,可以大大減輕設置重復性系統管理任務的操作。啟用周期性任務也有一個前提條件,即對應的系統服務crond必須已經運行。
1、crontab的配置文件和目錄
crond通過多個目錄和文件設置計劃任務,不同類型的任務由不同配置文件來設置。
1)、/etc/crontab——系統任務配置文件
/etc/crontab文件中設置的是維護Linux系統所需的任務,由Linux系統及相關程序在安裝時自動設置,不建議用戶手動修改此文件。例如,改文件中包括了設置Shell環境、可執行路徑等變量的操作,以及每小時、每天、每周、每月需要執行的任務目錄。
上述輸出中,部分內容如下。
■ SHELL=/bin/bash 設置執行計劃任務的Shell環境
■ PATH=/sbin:/bin:/usr/sbin:/usr/bin 定義可執行命令及程序的路徑
■ MAILTO=root 將任務輸出信息發送到指定用戶的郵箱
■ HOME=/ 將執行計劃任務時使用的主目錄
2)、/var/spool/cron/——用戶cron任務的配置文件存放目錄
由用戶自行設置(使用crontab命令)的cron計劃任務將被保存到目錄/var/spool/cron/目錄中的改變,如果發現有配置更改,他們就會被載入內存,所以當某個crontab文件改變後並不需要重新啟動crond守護進程就可以使設置生效。
2、使用crontab命令管理用戶的計劃任務
設置用戶的周期性計劃任務列表主要通過crontab命令進行,結合不同的選項可以完成不同的計劃任務管理啊哦做。常用的選項如下。
■ –e:編輯計劃任務列表(edit)
■ –u:指定所管理的計劃任務屬於哪個用戶,默認時針對當前用戶(自己),一般只有root用戶有權限使用此選項(用於編輯、刪除其他用戶的計劃任務)。
■ –l:列表顯示計劃任務。
■ –r:刪除計劃任務列表。
1)、編輯用戶的計劃任務列表
執行“crontab -e”命令後,將打開計劃任務編輯界面(與vi中的操作相同)。通過該界面用戶可以自行添加具體的任務配置,每行代表一個記錄,配置的格式與/etc/crontab文件中的主體部分類似,如下所示。
[[email protected] ~]# crontab -e
每一行任務配置記錄,都包括六個數據字段,分別表示不同的含義,如下表所示。
crontab計劃任務的配置格式
分鐘 | 小時 | 日期 | 月份 | 星期 | 執行的命令 |
01 | * | * | * | * | /bin/touch /tmp/1 |
00 | 4 | * | * | * | /bin/touch /tmp/2 |
00 | 4 | * | * | 1 | /bin/touch /tmp/3 |
30 | 2 | 1 | * | * | /bin/touch /tmp/4 |
50 | 3 | 2 | 1 | * | /bin/touch /tmp/5 |
由於各字段的作用不同,其取值範圍也不一樣,如下表所示,當時用“*”時表示取值範圍中的任意時間。crontab任務配置記錄中設置的命令操作將在“分鐘”+“小時”+“日期”+“月份”+“星期”都滿足的條件下執行。
crontab計劃任務的配置字段說明
項 目 | 說 明 |
分鐘 | 取值從0~59的任意整數 |
小時 | 取值從0~23的任意整數 |
日期 | 取值從1~31的任意整數(日期在該月份中必須有效) |
月份 | 取值從1~12的任意整數 |
星期 | 取值從0~7的任意整數(0或7代表星期日) |
命令 | 可以是普通的命令,也可以是自己編寫的程序腳本 |
除了“*”以外,還可以使用減號“-”、逗號“,”、斜杠“/”與數字構成表達式來表示較復雜的時間關系。
■減號“-”:可以表示一個連續的時間範圍,如“1-4”表示整數1、2、3、4。
■逗號“,”:可以表示一個間隔的不連續範圍,如“3,5,6,9”。
■斜杠“/”:可以用來指定間隔頻率,如在日期字段中的“*/3”表示每隔三天。
例如,若要按固定的周期重復完成一些系統管理任務,例舉任務如下:
①每天早上7:50自動開啟sshd服務,22:50關閉sshd服務;
②每隔五天清空一次ftp服務器公共目錄“/var/ftp/pub”中的數據;
③每周六的7:30重新啟動系統中的httpd服務;
④每周一、周三、周五的下午17:30,使用tar命令自動備份“/etc/httpd”目錄。
可以用root用戶通過crontab設置以下計劃任務。
[[email protected] ~]# crontab -e 50 7 * * * /sbin/service sshd start 50 22 * * * /sbin/service sshd stop 0 0 */5 * * /bin/rm -rf /var/ftp/pub/* 30 7 * * 6 /sbin/service httpd restart 30 17 * * 1,3,5 /bin/tar zcfhttpdconf.tar.gz /etc/httpd
普通用戶執行“crontab -e”命令時,可以設置自己的計劃任務(需要註意命令的執行權限)
因各條計劃任務在執行時並不需要用戶登錄,所以任務配置記錄中的命令建議使用絕對路徑,以避免因缺少執行路徑而無法執行命令的情況。另外,在設置不是每分都執行的任務時,“分鐘”字段也應該填寫一個具體的時間數值,而不要保留為默認的“*”,否則將會在每分執行一次計劃任務。
2)、查看用戶的計劃任務列表
crontab命令結合“-l”選項可以查看當前用戶的計劃任務列表,對於root用戶來說,還可以結合“-u”選項查看其它用戶的計劃任務。
[[email protected] ~]# crontab -l 50 7 * * * /sbin/service sshd start 50 22 * * * /sbin/service sshd stop 0 0 */5 * * /bin/rm -rf /var/ftp/pub/* 30 7 * * 6 /sbin/service httpd restart 30 17 * * 1,3,5 /bin/tar zcf httpdconf.tar.gz/etc/httpd
3)、刪除用戶的計劃任務列表
當只需要刪除某一條計劃任務時,可以通過“crontab -e”進行編輯;而清空某個用戶的所有計劃任務時,可以執行“crontab -r”命令。
[[email protected] ~]# crontab -r [[email protected] ~]# crontab -l no crontab for root
在設置用戶的crontab計劃任務的過程中,由於每一條記錄只能運行一行命令,難以完成更復雜的系統管理任務操作,因此在實際工作中,可以把很多復雜的操作命令編寫成一個腳本文件,然後在計劃任務配置中加載該腳本文件並執行。
本文出自 “侯良金” 博客,請務必保留此出處http://houliangjin.blog.51cto.com/13112910/1971875
Linux常用命令(十一)計劃任務管理