任務或作業:計劃的命令
at:計劃一次性任務
一個系統守護進程(atd),它有一組命令行工具可與守護進程進行交互;atd守護進程提供了a到z共26個隊列,作業按字母排列,越往後系統優先級越低
at <timespec> :計劃新作業,at會隨後讀取從stdin執行的命令。對於較大的命令以及錯別字敏感的命令,使用來自腳本文件的輸入重定向比在終端窗口中手動輸入命令要簡單,手動輸入時,Ctrl+d可以完成輸入
eg:
now +5min 相對時間,從現在起,5分鐘後執行
teatime tomorrow noon midnight 模糊時間
noon +4days 從中午起,4天后
5pm august 3 2016 2016年8月3號下午5點
檢查作業
atq | at –l : 查看用戶待處理的作業
顯示爲四列:作業編號、該作業計劃的日期和時間、作業所在隊列、作業所有者
●普通的非特權用戶只能查看和控制自己的作業,root可以查看和管理所有作業
at –c <jobnumber> :檢查在執行作業時將運行的實際命令
atrm <jobnumber> :將會刪除計劃的作業
cron計劃週期性作業
crond守護進程默認開機自啓,由多個配置文件和系統範圍內的文件控制的,使用戶和管理員擁有細微的控制權,可以控制應執行週期性作業的確切時間
crond守護進程以郵件的形式將執行的任務結果發送給任務的所有者;
但也可以將任務執行結果重定向到/dev/null,而不讓其發送到郵箱而佔用資源
crontab –l 列出當前用戶的計劃任務
crontab -r 刪除當前用戶的所有計劃任務
crontab -e 編輯當前用戶的計劃任務
crontab <filename> 刪除所有作業並替換爲從<filename>讀取的作業,若未指定任何文件,則將使用stdin
●root可以使用-u<username> 來管理其他用戶的作業
作業格式
編輯的文件每行均有一個作業,允許有空行,並且註釋的行以哈希符號#開頭,環境變量也可使用格式NAME=value來聲明
每個作業都包含六個字段,描述了執行的時間和內容:
用戶級任務
分 時 日 月 周 命令
系統級任務:
分 時 日 月 周 username 命令
前五個字段全部使用相同的語法規則
*無關緊要,始終,任何有效值
數字 指定分鐘數,小時數,日期,工作日等
- 表示範圍,連續時間如x-y ,x到y(包含)
, 表示列表,離散時間
*/x x表示時間間隔,每多久執行一次
還可使用三個字母的英文字母表示月份和工作日
最後一個字段包含要執行的命令。若未聲明shell環境變量,則該命令由/bin/sh執行
若命令包含未轉義的百分號%,則該百分號被當作新行,且%之後的所有內容將反饋到stdin中的命令
eg:
0 9 2 2 * /usr/local/bin/yearly_backup
在每年2月2號上午9點執行/usr/local/bin/yearly_backup
*/7 9-16 * Jul 5 echo “chime”
在7月每週五上午9點到下午4點間,每7分鐘向作業所有者輸出chime
58 23 * * 1-5 /usr/local/bin/daily_report
在每週週一到週五23時58分鐘執行/usr/local/bin/daily_report
3 * * * * echo hiya
在每小時的第3分鐘輸出hiya (1點3分,2點3分,3點3分)
* * * * 1,5 ls /tmp
週一、週五每分鐘都執行ls /tmp
10,40 * * * * ls /tmp
每小時10分,40分時執行,即每30分鐘執行ls /tmp
計劃系統cron作業
系統cron作業在星期幾和命令字段之間定義user,用來指定作業應在哪個用戶下運行
系統cron作業在2個位置定義:/etc/crontab和/etc/cron.d/*,安裝cron作業的軟件包應在/etc/cron.d/中放置文件才能執行安裝操作,但管理員也可用此位置來將相關的作業分到單個文件中
預定義作業沒小時,每天,每週和每月運行一次,這些作業將分別執行位於/etc/cron.hourly/、/etc/cron.daily/、/etc/cron.weekly/和/etc/cron.monthly/中的所有腳本。
●確保使位於這些目錄中的所有腳本可執行,如果腳本不可只執行,則不會運行。
/etc/cron.hourly/*腳本是使用run-parts命令從/etc/cron.d/0hourly中定義的作業執行的。每日、每週和每月的作業也使用run-parts命令執行。