進程管理(二)之計劃任務
一、計劃任務:
1、未來的某時間點執行一次任務:
(1)at:跟一個時間點,到點了自動運行指定的任務
(2)batch:系統自行選擇空閑時間去執行此處指定的任務
2、周期性運行某任務:cron
二、at命令:
1、at命令:at [option] TIME
注:當輸入完成后,使用Ctrl+d結束,不能使用Ctrl+c 。
2、常用選項:
-V 顯示版本信息:
-l: 列出指定隊列中等待運行的作業;相當于atq
-d: 刪除指定的作業;相當于atrm
-c: 查看具體作業任務
-f /path/from/somefile:從指定的文件中讀取任務
-m:當任務被完成之后,將給用戶發送郵件,即使沒有標準輸出
注意:作業執行命令的結果中的標準輸出和錯誤以郵件通知給相關用戶
3、at的時間格式:
noon(中午); midnight(子夜,凌晨整點); teatime(午茶時間,即下午四點)(4pm);tomorrow
now+#{minutes,hours,days, OR weeks}
(1)在今日的HH:MM 進行,若該時刻已過,則明天此時執行任務:HH:MM 02:00
(2)規定在某年某月的某一天的特殊時刻進行該項任務:HH:MM YYYY-MM-DD 04:00 2016-09-20
(3)規定在未來某個時間點執行該項任務:HH:MM[am|pm] [Month] [Date]
04pm March 17 ; 17:20 tomorrow
(4)HH:MM[am|pm] + number [minutes|hours|days|weeks],在某個時間點再加幾個時間后才進行該項任務:now + 5 minutes 和04pm + 3 days
4、at任務:
1、執行方式:1)交互式2)輸入重定向3)at -f 文件
依賴與atd服務,需要啟動才能實現at任務
2、at隊列存放在/var/spool/at目錄中(機器關機也不會丟失,但如果任務沒有正常執行,則在第二天的時間點執行)
刪除at計劃任務:
3、通過/etc/at.{allow,deny}控制用戶是否能執行at任務(系統正常情況下是沒有at.allow這個文件的,需要手動建立)
4、at的使用設置:
先尋找/etc/at.allow (相當于白名單)文件,文件中的使用者才能使用at ,沒有在這個文件中的使用者則不能使用at (即使沒有寫在at.deny 當中);如果/etc/at.allow 不存在,就尋找/etc/at.deny(相當于黑名單) 這個文件,若寫在這個at.deny 的使用者則不能使用at ,而沒有在這個at.deny 文件中的使用者則可使用at 命令;如果兩個文件都不存在,只有root 可以使用at 這個命令。
三、周期性任務計劃cron:
1、確保crond守護處于運行狀態:
CentOS 7:
CentOS 6:
2、相關的程序包:
cronie: 主程序包,提供crond守護進程及相關輔助工具
cronie-anacron:cronie的補充程序;用于監控cronie任務執行狀況;如cronie中的任務在過去該運行的時間點未能正常運行,則anacron會隨后啟動一次此任務
crontabs:包含CentOS提供系統維護任務
3、計劃任務:
(1)系統cron任務:系統維護作業
/etc/crontab
系統的計劃任務: /etc/crontab
/etc/cron.d/ 配置文件
/etc/cron.hourly/ 腳本
/etc/cron.daily/腳本
/etc/cron.weekly/腳本
/etc/cron.monthly/腳本
(2)用戶cron任務:
crontab命令:每個用戶都有專用的cron任務文件:/var/spool/cron/USERNAME
crontab命令格式:crontab[-u user] [-l | -r | -e] [-i]
使用選項:-l: 列出所有任務;
-e: 編輯任務;
-r: 移除所有任務;
-i:同-r一同使用,以交互式模式移除指定任務
-u user: 僅root可運行,指定用戶管理cron任務
控制用戶執行計劃任務:/etc/cron.{allow,deny},效果如上面at的控制是一樣的。
注意:運行結果的標準輸出和錯誤以郵件通知給相關用戶
(1) COMMAND > /dev/null
(2) COMMAND &> /dev/null
對于cron任務來講,%有特殊用途;如果在命令中要使用%,則需要轉義;不過,如果把%放置于單引號中,也可以不用轉義
4、日志:/var/log/cron
5、時間表示格式:
(1) 特定值:給定時間點有效取值范圍內的值
# 0 0 1 * * 每月的1號凌晨零點
(2) * :給定時間點上有效取值范圍內的所有值,表示“每…”
# 30 0 20 * * 每月的20號凌晨零點30分(有效時間如30分,每月的有效日20天)
(3) 離散取值:#,#,# 如:0 0 1,10,20 * * 每月的1號、10號、20號的凌晨零點
(4) 連續取值:#-# 如:0 0 10-20 * * 每月的10號到20號的凌晨零點
(5) 在指定時間范圍上,定義步長:/# ,#即為步長
*/20 0 1 * * 每月的1號凌晨零點每二十分鐘執行一次
6、系統默認設置:
@reboot Run once after reboot(機器重啟后執行)
@yearly 0 0 1 1 * (每年的一月一號凌晨零點執行一次)
@annually 0 0 1 1 * (每年的一月一號凌晨零點執行一次)
@monthly 0 0 1 * * (每月的一號凌晨零點執行一次)
@weekly 0 0 * * 0 (每周的凌晨零點執行一次)
@daily 0 0 * * * (每天的凌晨零點執行一次)
@hourly 0 * * * * (每小時執行一次)
7、anacron系統:運行計算機關機時cron不運行的任務,CentOS6.0以后版本取消anacron服務,由crond服務管理。
配置文件:/etc/anacrontab ;負責執行/etc/ cron.daily /etc/cron.weekly /etc/cron.monthly中系統任務;/etc/cron.hourly/由/cron.d/0hourly執行
8、管理臨時文件:
rhel6.0使用/etc/cron.daily/tmpwatch定時清除臨時文件
rhel7.0使用systemd-tmpfiles-setup服務實現
配置文件:
/etc/tmpfiles.d/*.conf
/run/tmpfiles.d/*.conf
/usr/lib/tmpfiles/*.conf
/usr/lib/tmpfiles.d/tmp.conf
命令:systemd-tmpfiles –clean|remove|create configfile
9、at和crontab使用格式的對比:
at |
crontab |
|
Create |
at time |
crontab -e |
List |
at -l |
crontab -l |
Details |
at -c #(任務計劃編號) |
N/A |
Remove |
at -d #(任務計劃編號) |
crontab -r |
Edit |
N/A |
crontab -e |
注:沒有被重定向的輸出會被郵寄給用戶;根用戶(root)能夠修改其它用戶的作業;root修改或者刪除其他用戶的任務計劃,命令#crontab -e -u username
10、 如何在秒級別運行任務?
* * * * * for min in 0 1 2; do echo "hi"; sleep 20; done
sleep命令:s: 秒, 默認;m: 分;h: 小時;d: 天
例題:
1、每4小時備份一次/etc目錄至/backup目錄中,保存的文件名稱格式為“etc-yyyy-mm-dd-HH.tar.xz”
2、每周2, 4, 7備份/var/log/messages文件至/logs目錄中,文件名形如“messages-yyyymmdd”
3、每兩小時取出當前系統/proc/meminfo文件中以S或M開頭的信息追加至/tmp/meminfo.txt文件中
4、工作日時間,每10分鐘執行一次磁盤空間檢查,一旦發現任何分區利用率高于80%,就執行wall警報
原創文章,作者:Aaron_wang,如若轉載,請注明出處:http://www.www58058.com/44652