一、基礎
at指令(概念):用于指定一個定時任務(幹什麼),在某個特定的時間節點(什麼時間執行)執行一次(執行的頻率)
at指令(功能):也可以用于删除、列出已經設定好的定時任務;與at指令相關的指令(别名)有atq,atrm,batch指令
at和batch特點:均是從标準輸入中(鍵盤-->預設)或指定的檔案中(自定義)讀取相關的指令,并在指定的時間運作對應的指令!
注意:在運作at指令前,需要確定系統啟動了atd服務
實操如下:
systemctl status atd # 檢視服務預設的是否開啟,确認處于active(running)狀态-->綠色
systemctl start atd # 如果服務未開啟,請開啟atd服務--->atd守護程序(dameon)
預設:不加字尾的服務都是dervice!
二、與定時任務at相應的檔案
(1) /var/spool/at/spool:使用者存儲設定好的at任務的目錄,可進入該目錄删除相應的at任務(底層)!
(2) /etc/at.allow:記錄着允許使用at指令的使用者,隻有在這個目錄裡的使用者才能使用at!
(3) /etc/at.deny:記錄着使用者的黑名單,在裡面的使用者不允許使用at指令!
注意1:at.allow檔案的優先級大于at.deny檔案!
注意2:記錄使用者黑白名單的格式是每行一個使用者名單!
預設:系統預設會提供一個空的/etc/at.deny檔案,所有使用者都可以使用at指令!
三、at參數的說明(功能出發)
-m 當指定的任務被完成之後,将給使用者發送郵件(email),即使沒有标準輸出!
-l 顯示"待執行"任務的清單---->atq的别名(query)
-d 删除指定(任務編号-->先查詢)的"待執行"任務;atrm的别名-->不指定編号(删除目前使用者所有的任務)
-r rm(同d)
-v 顯示任務将被執行的"時間"--->驗證是否是準時執行!
-c 列印任務的内容到标準輸出---->該任務的"實際"指令内容-->cat!
-V 顯示版本資訊(大寫)
-f<檔案> 從指定檔案讀入任務(自定義)"而不是"從标準輸入讀入(自定義)!
-t<時間參數> 以時間參數的形式送出要運作的任務
時間格式的分類
(1)絕對計時法--->列出常見的四種方式
(1) 明天17點鐘---->17:20 tomorrow
格式:HH:MM --->預設是當天,若逾時則明天此時刻執行!
(2) 例如:05:00 2018-12-22
格式:HH:MM YYYY-MM-DD
(3) 某年(預設目前)某月某一天的特殊時刻
格式:HH:MM[am|pm] [Month-->英文] [Date]
例如:04:00pm July 30
說明:以空格作為分割
(2)相對計時法
例如:從目前時刻起再過五分鐘執行相關的指令
案例:now + 5 minutes
簡寫:now+5min
文法:HH:MM[am|pm] + number [mimutes|hours|days|weeks]--->注意加s
優點:這對于安排不久就要執行的指令是很有好處的!
四、測試
(1)任務的編輯和任務的檢視
(2)黑名單
(3)白名單
說明:如果白名單存在,沒有内容,root不受黑白名單的限制!
補充:為了突出黑白名單檔案存在優先級問題,可以将student都寫入到檔案中,測試!
六、定時任務的輸出問題
說明:預設定時任務執行後如果有輸出的,不會在目前螢幕顯示,會以郵件的形式發給at定時任務的發起者!
注意1:由于并沒有指令文法檢測,從at -c 檢視指令執行内容看,如果有錯誤輸出&2,則會在目前螢幕輸出!
注意2:postfix郵件服務是否開啟,預設是開啟的,如果沒有受到郵件看下此服務的狀态資訊,看at -l有無郵件的發送!
疑惑:root和kiosk接受到了郵件資訊,但是自定義的使用者沒有接受到發送的郵件?
分析:由于su的切換,從at -c number來看,會繼承目前的環境變量等,是以要看頂層使用者的mail!
七、原理分析
原理:指定好時間來執行任務,at指令會進入一個at shell的環境讓使用者自定義任務的内容(相當于cat >filename的形式),ctrl+d來
終止鍵盤的标準輸入,此時會将任務以檔案的形式寫入到/var/spool/at/目錄中,那麼檔案名是如何命名的呢?
解釋(接上):檔案名系統自定義的,并且檔案一旦執行,該檔案就自行删除--->思考檔案是如何建立和删除的?
[21:32:52][[email protected]:/var/spool]$ ls -ld /var/spool/at/
drwx------. 3 daemon daemon 31 1月 19 21:25 /var/spool/at/
關鍵:daemon這個使用者!
了解:dameon是系統使用者,為了管理相關服務用的,一般每個服務對應一個使用者,他們的shell都是/sbin/nologin(不能登入系統)
注意1:任務中的指令最好全路徑,因為指令的尋找通過PATH(可能不在此路徑)
注意2:任務中的檔案名最好全路徑,因為at運作時會跑到執行at指令的工作目錄!
優點:背景執行的能力--->脫機後繼續執行(網絡斷線後)
原因:系統會将該任務獨立出目前使用者的bash環境,交給系統的atd服務程式來接管!
八、進階
非常詳細的說明檔案
at的背景執行(第二段)