1. 程式人生 > >Linux常用命令(十一)計劃任務管理

Linux常用命令(十一)計劃任務管理

侯良金 linux 任務計劃 crontab 基本命令

Linux常用命令(十一)計劃任務管理

RHEL6系統中默認已安裝了atcronie軟件包,通過atdcrond這兩個系統服務實現一次性、周期性計劃任務的功能,並分別通過atcrontab命令進行計劃任務設置。


一、at一次性任務設置

使用at命令設置計劃任務只在指定的時間點執行一次,前提是對應的系統服務atd必須已經運行。需要註意的是,計劃執行任務的時間、日期必須安排在當前系統的時刻之後,否則將無法正確設置計劃任務。比如現在是2017年,你要設置一個任務計劃在2016年執行就是肯定不行的。

設置一次性的計劃任務時,在at命令行中依次指定計劃執行任務的時間、日期作為參數(若只指定時間則表示當天的該時間,若只指定日期則表示該日期的當前時間)

,確認後將進入待“at>”提示符的任務編輯界面;每行設置一條執行命令,可以依次設置多條語句,最後Ctrl+D組合鍵提交任務即可。

例如,一下操作先通過date命令確認當前的系統時間,並設置在當天的515分自動執行在“/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必須已經運行。

1crontab的配置文件和目錄

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的任意整數(07代表星期日)

命令

可以是普通的命令,也可以是自己編寫的程序腳本

除了“*”以外,還可以使用減號“-”、逗號“,”、斜杠“/”與數字構成表達式來表示較復雜的時間關系。

減號“-”:可以表示一個連續的時間範圍,如“1-4”表示整數1234

逗號“,”:可以表示一個間隔的不連續範圍,如“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常用命令(十一)計劃任務管理