任務計劃機制:定義腳本程序執行的任務不是當即的,而是安排安排在未來的某個時間運行。這就是機制任務計劃機制。所任務計劃必須是個未來某個時間點執行的任務
定義的方式
1、 在未來的某個時間點執行一次某個任務
2、 周期性的執行某任務
任務計劃的實現
一次性的任務執行實現
可以實現的兩個命令:at和batch
at:是指定時間點的
at的使用方法:at後跟時間點即可,按Enter,屏幕會輸出at>提示符,在提示符下輸入我們要執行的命令即可,形式如下
at> COMMAND(可以寫多個命令)
at> COMMAND
...........
at>Ctrl +d(提交任務的命令)
輸入完成後就可以在某個時間點去執行了;這裡需要注意:這個時間必須是未來的某一個時間
at指定時間的幾種方法:
絕對時間
HH:MM,DD:MM:YY,MM/DD/YY 例如:at 10:20(如果10:20時間已過,就是下一次的10:20這個時間點)
相對時間
at now+# 單位是minutes,hours,days,weeks 例如:at now+3minutes(從這一刻開始往後的3分鐘即3分鐘以後)
模糊時間
noon(正午即12:00),midnight(午夜即晚上00:00),teatime(下午4點)
命令的執行結果處理
將以郵件的形式發送給安排任務計劃的用戶
使用at執行兩個作業示例 如圖1所示
at now+5minutes(5分鐘後執行以下任務)
at> ll /var
at> cat /etc/fstab
at> <EOF>(這裡執行的是ctrl+d命令)
at now+10minutes
at> cat /etc/issue
at> <EOF>
圖1 創建兩個任務列表
查看任務計劃
at -l = atq :顯示自己的作業列表 如圖2所示
圖2 作業列表查看
數字2和3表示是第幾個作業 中間的時間是:執行時間;字母"a"表示作業隊列;root表示是誰的作業
at -d AT_JOB_ID = atrm AT_JOB_ID:刪除某個作業
例如:at -d 2:刪除2號作業
batch:batch與at區別是batch不需要指定時間;batch特性是在系統空閒的時候執行作業(是自動選擇的,所以不需要指定時間),
其他的使用格式都是與at相同的
at與batch權限使用的定義
在/etc/的目錄下可以創建兩個文件一個是at.deny文件一個是at.allow文件
at.allow文件
可以理解為允許用戶使用的at與batch的白名單;如果at.allow不存在at.deny存在,只要是寫在at.deny中的用戶都不允許使用
/etc/at.deny文件
可以理解為允許用戶使用的at與batch的黑名單如果at.allow存在at.deny不存在,只有寫at.allow中的用戶才具有使用權限
如果at.deny存在但是為空時,就是定義所有用戶都具有使用權限
如果兩個文件都存在以at.allow文件內容定義為主;如果都不存在,只有root用戶具有使用權限
cron介紹
cron與at一樣也是安排在某個任務在接下來的某個時間點運行的;cron可能在某個時間點都有可能執行;所以,cron本身要是一個不間斷運行的服務
如果不小心關閉了系統略過了服務任務,那計劃任務的執行到下一次才能執行,所以cron需要不間斷的運行
anacron介紹
anacron是cron的補充,它的功能就是實現讓cron因為各種原因在過去的時間點定義執行的任務但是沒有執行的任務,讓這個任務在系統恢復正常時再次正常的執行一次。anacron也是一種服務,一般都是隨機運行的;anacron本身也必須要隨時在線執行,即開機後就能啟動。所以anacron主要是應用在經常性關機的設備上,例如筆記本
cron類別
系統cron任務:跟用戶沒有關系,是操作系統自身為了周期性執行某一個操作或任務而特意安排的。系統cron任務定義在
用戶cron任務:都定義在/var/spool/cron/USERNAME(USERNAME意思是指與用戶名同名的文件)
/etc/crontab與/var/spool/cron/USERNAME文件格式區別
/etc/crontab(文件中共有7個段,其中5個段指時間,一個段指用戶,一個段指運行的任務)如:分鐘 小時 天 月 周 用戶 任務(每個段使用空格隔開)
/var/spool/cron/USERNAME文件中共有6個段,其中5個段指時間,一個段指運行任務)如:分鐘 小時 天 月 周 任務 ------它不需要再指定用戶
時間的有效取值
分鐘: 0-59
小時: 1-23
天 : 1-31
月 : 1-12
周 : 0-7,(0和7都表示周日)
時間通配
*:對應取值的所有有效取值
5 * * * * :(每小時第五分鐘)
5 * * * 7 :(每周日的每小時的第五分鐘)
15 12 1 1 *:(每年1月1號12點15分鐘執行)
,:離散時間點取值
10,40 * * * 2,5 (每周二和周五的每小時的第10分與第40分都執行一次)
10,40 12 * * 2,5(每周二和周五的12點的第10分與第40分都執行一次)
-:連續時間點
15 12 * * 1-5(周一至周五的凌晨12點15執行)
/: 對應取值范圍內每多久一次
*/5 * * * * :每五分鐘執行一次
01 */2 * * * :每兩小時執行一次(01是自己定義的,只是給個時間點,可以隨意定義)
12 12 */2 * * :每兩天執行一次(12可自己定義)
cron的環境變量
cron執行的所有命令都去PATH環境變量指定的路徑下去找(但是cron是周期性執行的任務,cron
執行的那一刻,用戶可能是沒有登錄的,如果沒有登錄則沒有PATH變量
cron的PATH 基本上就是/bin:/sbin:/usr/bin:/usr/sbin這幾個路徑;當命令寫在了其他位置,以用戶的方式是可以執行,但是cron未必可以執行,所以應該使用絕對路徑例如cat命令:/bin/cat
如果cron任務是在腳本中定義的時候應該直接先定義PATH變量
用戶任務的管理(crontab)
crontab相關選項介紹
crontab -l:列出當前用戶的所有任務
crontab -e:編輯(用於自己定義任務的
crontab -r:移除當前用戶的所有任務
crontab -u:USERNAME:管理其他用戶的cron任務
anacrontab介紹
anacrontab是crontab的補充,但是不能替代crontab
anacrontab的語法格式即/etc/anacrontab文件分析如圖3所示
圖3 /etc/anacrontab文件內容查看
配置文件中共4個段,前2個段是指時間的,第3個段是注釋信息,第四個段是要執行的任務。
第一段中的“1”表示過去已經有一天沒有執行了;“7”表示已經有7天沒有執行了;“30”即已經有一個月沒有執行了;第二個段的數字是在對應的沒有執行的任務在開機執行的第65、70、75分鐘執行一次。它的最小單位是天,即是監控的每天,每周,每月沒有執行的任務記錄
補充
無論是運行cron還是anacron,它們對應的服務都必須開啟,只有對應的服務啟動後,其功能才能才可以使用;anacrond服務默認是關閉的,需要手動啟動
開啟cron服務命令是 :service crond start
開啟anacron服務命令是:service anacron start
本文出自 “Fly*On*Sky” 博客,請務必保留此出處http://djy0000.blog.51cto.com/5816828/1168780