計劃任務管理
1、at命令—— 一次性任務設置
在指定的日期、時間點自動執行預先設置的一些命令操作,屬於一次性計劃任務
服務腳本名稱:/etc/init.d/atd
設置格式:at [HH:MM] [yyyy-mm-dd]
[root@localhost ~]# service atd start ==>啟動atd服務 [root@localhost ~]# at 11:35 at> reboot at>==>按ctrl + D 提交任務,則自動進入這裡 job 1 at 2013-03-16 11:35 [root@localhost ~]# atq 1 2013-03-16 11:35 a root
==>接下來我郁悶了好久,因為等了3分鐘還沒有結果,我是11:30分設置的這個計劃任務,按道理早應該重啟了,之後才發現,原來我虛擬機的時鐘和我自己的電腦不同步,我自己的電腦快了5分鐘,啊。。。白白等了N個3分鐘還在不斷找原因,執行了date命令才發現原來現在才11:30。。。
2、crontab命令
按照預先設置的時間周期(分鐘、小時、天……)重復執行用戶指定的命令操作,屬於周期性計劃任務
(1)、先來看一下/etc/crontab文件的內容:
[root@localhost ~]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts ==>這裡分別設置了每小時每天每星期每月定期執行的任務腳本分別存放在這些目錄中 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
注意:
啟用周期性任務有一個前提條件,即對應的系統服務crond必須已經運行;
全局配置和系統默認配置中的內容一般不需要用戶去修改,用戶只需設置/var/spool/cron/目錄下與本帳號同名的文件即可
(2)、管理cron計劃任務
編輯計劃任務:crontab -e [-u 用戶名]
查看計劃任務:crontab -l [-u 用戶名]
刪除計劃任務:crontab -r [-u 用戶名]
(root用戶可以管理指定用戶的計劃任務;普通用戶只能管理自己的計劃任務)
(備注:用戶只需執行“crontab -e”命令後會自動調用文本編輯器(默認為vi)並打開“/var/spool/cron/用戶名”文件,無需手動指定文件位置)
(3)、crontab應用簡單舉例
1)、示例1:root用戶
需求: 每天早上7:50自動開啟sshd服務,22點50時關閉
每隔5天清空一次FTP服務器公共目錄/var/ftp/pub
每周六的7:30時,重新啟動httpd服務
每周一、三、五的17:30時,打包備份/etc/httpd目錄
[root@localhost ~]# crontab -e 50 7 * * * /sbin/service sshd start 50 22 * * * /sbin/service sshd stop 0 * */5 * * /bin/rm -rf /var/ftp/pub/* 30 7 * * 6 /sbin/service httpd restart 30 17 * * 1,3,5 /bin/tar jcvf httpdconf.tar.bz2 /etc/httpd
2)、示例2:linuxidc用戶
需求:每周日晚上23:55時將“/etc/passwd”文件的內容復制到宿主目錄中,保存為pwd.txt文件
[root@localhost ~]# crontab -e -u linuxidc 55 23 * * 7 /bin/cp /etc/passwd /home/linuxidc/pwd.txt
3)、示例3:
root用戶查看自己的計劃任務列表;查看並刪除linuxidc用戶設置的計劃任務
[root@localhost root]# crontab -l 50 7 * * * /sbin/service sshd start 50 22 * * * /sbin/service sshd stop 0 * */5 * * /bin/rm -rf /var/ftp/pub/* 30 7 * * 6 /sbin/service httpd restart 30 17 * * 1,3,5 /bin/tar jcvf httpdconf.tar.bz2 /etc/httpd
[root@localhost root]# crontab -l -u linuxidc 55 23 * * 7 /bin/cp /etc/passwd /home/linuxidc/pwd.txt [root@localhost root]# crontab -r -u linuxidc [root@localhost root]# crontab -l -u linuxidc no crontab for linuxidc [root@localhost root]#
從上面這3個例子簡單總結一下crontab任務的配置格式:
(1) 時間周期設置: 任務內容設置:
50 3 2 1 * run_command
分鐘 小時 日期 月份 星期 命令
字段
說明
分鐘
取值為從0到59之間的任意整數
小時
取值為從0到23之間的任意整數
日期
取值為從1到31之間的任意整數
月份
取值為從1到12之間的任意整數
星期
取值為從0到7之間的任意整數,0或7代表星期日
命令
要執行的命令或程序腳本
前5個字段指定任務重復執行的時間規律,第6個字段用於指定具體的任務內容
crontab任務配置記錄中,所設置的命令在“分鐘+小時+日期+月份+星期”都滿足的條件下才會運行。
(2)、時間數值的特殊表示方法
* 表示該范圍內的任意時間
, 表示間隔的多個不連續時間點
- 表示一個連續的時間范圍
/ 指定間隔的時間頻率
應用示例:
0 17 * * 1-5 周一到周五每天17:00
30 8 * * 1,3,5 每周一、三、五的8點30分
0 8-18/2 * * * 8點到18點之間每隔2小時
0 * */3 * * 每隔3天