一、簡介
(1)作用:
計劃任務主要是做一些週期性的任務,目前最主要的用途是定期備份數據
(2)一次性調度執行 at
(3)循環調度執行 cron
所有計劃任務執行中的輸出都會以郵件的方式發送給指定用戶, 除非重定向
二、一次性調度執行at
1.程序安裝(默認已經安裝)
在系統光盤中。
#rpm -ivh at.x86_64 //安裝
#systemctl start atd //啓動
#systemctl status atd //查看
Active: active (running) //運行中 inactive是不活躍就是沒有運行。
2.語法格式
#at now +5min //五分鐘後
#at noon +4 days //四天後中午
#at 5pm august 3 2018 //2018年8月3日下午5點
#at 16:00 2018-11-27 //2018年11月27日16點
#at 4pm + 3days //3天后下午4點
3.一次性任務計劃例題
例1:
[root@localhost ~]# at now +1min
at> useradd uuuu
at> <EOT> //CTRL+D提交任務
job 1 at Sat Mar 21 22:34:00 2015
[root@localhost ~]# atq ----查詢未執行的at任務
3 Thu Mar 30 09:55:00 2017 a root
稍等片刻。1分鐘後。
[root@localhost ~]# id uuuu ------查詢uuuu用戶ID來判斷用戶是否通過at建立成功
例2:通過重定向,一次性導入多個任務
[root@localhost ~]# vim at.jobs
useradd u99
useradd u00
touch /`date +%F`.txt ---` `中的命令先執行
[root@localhost ~]# at now +1min < at.jobs
三 、循環調度執行cron
1.簡介
crond的概念和crontab是不可分割的。crontab是一個命令,用於設置週期性被執行的指令,crond是它的守護進程。
查看進程的狀態:
#systemctl status crond.server
#ps aux | grep crond
root 550 0.0 0.0 126300 1648 ? Ss 10:05 0:00 /usr/sbin/crond -n
2.用戶級的計劃任務
(1)計劃任務的存放位置
#ls /var/spool/cron/
(2)管理方式;(針對當前登陸的用戶)
2.1 創建計劃(Edit)
#crontab -e
2.2 查詢計劃(List)
#crontab -l
#crontab -l -u username //管理員用來管理其他用戶的計劃任務
2.3刪除計劃(Remove)
#crontab -r
2.4高級管理-------拒絕用戶執行計劃任務。
在拒絕文件中添加用戶名
/etc/cron.deny
alice
jack
測試:登錄該用戶,通過該用戶創建計劃任務
[alice@localhost ~]$ crontab -e //提示拒絕用戶執行。
You (alice) are not allowed to use this program (crontab)
See crontab(1) for more information
(3)語法格式job format -----在/etc/crontab中
分 時 日 月 周
# .---------------- 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
# | | | | |
# * * * * * command
特殊例子:
00 02 * 6 5 ls //每年6月的週五2:00整 (特殊)
00 02 14 * 7 ls //每月14號2:00整 或者 每週日2:00整,這兩個時間都執行
00 02 14 2 7 ls //每年2月14號2:00整 或者2月 每週日2:00整,這兩個時間都執行
*/5 * * * * ls //每隔5分鐘
00 02 1,5,8 * * ls //每月1,5,8號的2:00整
00 02 1-8 * * ls //每月1到8號的2:00整
3.系統級的計劃任務
(1)簡介
系統級任務計劃作用:
臨時文件的清理 /tmp 和 /var/tmp
系統信息的採集 sar
系統日誌的輪轉 logrotate
通常不是由用戶定義
(2)定義位置一
定義系統的循環的任務計劃------在/etc/crontab中按格式添加循環任務
#vim /etc/crontab //該文件中默認沒有定義任何計劃任務
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=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
(3)定義位置二【anacron】
3.1簡介:
1.以天爲單位或者在啓動後立刻進行anacron的動作
2.偵測停機期間應該進行但是並沒有進行的crontab任務,如果有就將該任務執行一遍然後自動停止。
3.2運行週期
時,天,周,月
3.3工作原理
anacron會以一小時,一天、七天、一個月爲期去偵測系統未進行的crontab任務,因此對某些特殊的使用環境(關機未執行)非常有幫助。
3.4示例
第一步 主程序:/etc/cron.d
命令:# ls /etc/cron*
第二步 主程序所調動的程序 : /etc/cron.d/0hourly
命令:# cat /etc/cron.d/0hourly
第三步 主程序所調動的程序anacron : /etc/cron.hourly/0anacron
命令: # ls /etc/cron.hourly/
第四步 調動了anacron程序
命令 : # cat /etc/cron.hourly/0anacron
第五步 anacron程序的機制 -----命令anacrontab
命令 : # cat /etc/anacrontab
第六步 觀察日誌,會發現時間戳(如果沒有時間戳,可以通過命令【anacron -u 】 立刻觸發該程序更新)
命令: # cat /var/spool/anacron/cron.daily
第七步:觀察任務計劃彙總日誌(通過強制執行的命令【 anacron -f 】,可以立刻觸發該程序)
查看彙總日誌命令:#tail /var/log/cron
[root@localhost ~]# tail /var/log/cron
2017-10-23
Oct 23 10:08:08 localhost anacron[15881]: Job `cron.daily' locked by another anacron - skipping
Oct 23 10:08:08 localhost anacron[15881]: Will run job `cron.weekly' in 59 min.
Oct 23 10:08:08 localhost anacron[15881]: Will run job `cron.monthly' in 79 min.
Oct 24 10:05:36 localhost anacron[15983]: Updated timestamp for job `cron.daily' to 2017-10-24
Oct 24 10:05:36 localhost anacron[15983]: Updated timestamp for job `cron.weekly' to 2017-10-24
Oct 24 10:05:36 localhost anacron[15983]: Updated timestamp for job `cron.monthly' to 2017-10-24
總結:
anacron程序是挽救系統中未及時完成的任務,用戶一般不需要使用
anacron程序解釋:
#anacron [-sfn] [job]
#anacron -u [job]
-s :開始一連續的運行各項工作,會依據時間記錄檔的數據判斷是否進行。
-f :強制進行,而不去時間記錄檔
-n : 立刻進行未進行的任務,而不延遲 (delay) 等待時間;
-u :僅升級時間記錄檔的時間戳記,不進行任何工作。
job :由 /etc/anacrontab 定義的各項工