Linux之計劃任務
計劃任務特性
1. 需要在指定的某時間段運行
2. 需要將任務結果郵件通知用戶
3. 單次任務及循環任務區別
Linux計劃任務的實現工具
1. at工具
其只能執行一次性任務
其會自動加載部分環境變量
可以執行命令
可以執行腳本
作業有隊列,用單字母表示,默認爲a隊列
作業計劃任務是以絕對序列值進行排序
任務結果會以郵件的形式通知用戶
2. batch工具
其使用方法與at工具類似
最大的區別爲:它會選擇系統在比較空閒的時間段執行任務
3. crontab命令
其可以循環執行任務,實現週期性任務
最小時間單位爲
分鐘
,如果需要到秒
級別,需要你是用外部機制可以執行命令
可以執行腳本
每次的任務都會發送郵件至用戶通知
其依賴於crond守護進程及相關輔助工具,
cronie
是其主程序包
一、at工具
synopsis: at [OPTIONS]...time
[time]
格式20:10 2015-10-30
HH:MM[YYYY-mm-dd]
noon
: 正午midnight
: 午夜teatime
: 下午4點tomorrow
: 明天now +# UNIT
* UNIT: min,hours,days,weeks
[options]
at -d 3
==atrm 3
:刪除第3號任務at -f at.sh now+5min
-l
: 列出任務隊列,相當於atq
命令-f FILE
: 從指定文件中讀取作業任務,不用交互式輸入-d #
: 刪除任務-c #
: 查看指定任務的內容-q a|b|c|d
: 指定默認隊列
二、crontab工具
cron任務的分類
系統cron任務
直接編輯/etc/crontab文件
/etc/crontab
配置文件
配置命令
用戶cron任務(
root用戶也不例外
)crontab -e
/var/spool/cron/USERNAME
配置文件
配置命令
/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 # | | | | | # * * * * * user-name command to be executed
每一行定義一個週期性任務
此處的環境變量不同於用戶登錄後獲得的環境,因此,建議命令使用絕對路徑,或自定義path環境變量
執行結果郵件發送給想着用戶,即mailto=中定義的用戶
普通用戶不需要定義mailto參數,因爲他的任務文件就以用戶名命名
共7個字段
如果命令中有
%
這類的符號,需要轉義,但旋轉到單引號中的不用轉義
crontab命令:
synopsis - crontab [-u user] [-l | -r | -e] [-i] [-s]
[options]
-e
: 編輯任務,建議使用crontab -e
,這樣可以幫忙檢查其錯誤-l
: 列出所有任務-r
: 移除所有任務,即刪除對應/var/spool/cron/USERNAME文件-i
: 交互式,在使用-r刪除所有用戶時,提示用戶確認-u USER
: root用戶可以爲指定的用戶管理、指定任務
注意:運行結果會以郵件方式通知當前用戶,如果拒絕接收郵件,可以會導致未備份成功卻沒有任何消息反饋的情況,建設如下操作:
COMMAND > /dev/null : 將正確結果刪除,只返回錯誤輸出併發送郵件至用戶
COMMAND &> /dev/null : 不建議此操作
指定的某任務在指定的時間因關機未能執行,下次開機不會自動執行
如果某時間點因故未能按時執行,下次開機後無論是否到了相應時間點,都要補充執行一次,可使用anacron實現
練習:
每12小時備份一次/etc目錄至/backups目錄中,保存格式爲etc-yyy-mm-dd-hh.tar.xz”
01 */12 * * * root tar Jcf /backups/etc-$(date +"\%F-\%H-\%S").tar.xz /etc/
01 09 * * 2,4,7 root tar Jcf /logs/secure-$(date +"\%Y\%m\%d") /var/log/secure
01 */2 * * * root grep '^[M\|S]' /proc/meminfo > /tmp/meminfo.txt