天天看點

Linux基礎指令(十六)任務計劃at

一、基礎

        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)任務的編輯和任務的檢視

Linux基礎指令(十六)任務計劃at

(2)黑名單

Linux基礎指令(十六)任務計劃at

(3)白名單

Linux基礎指令(十六)任務計劃at

說明:如果白名單存在,沒有内容,root不受黑白名單的限制!

補充:為了突出黑白名單檔案存在優先級問題,可以将student都寫入到檔案中,測試!

六、定時任務的輸出問題

說明:預設定時任務執行後如果有輸出的,不會在目前螢幕顯示,會以郵件的形式發給at定時任務的發起者!

Linux基礎指令(十六)任務計劃at

注意1:由于并沒有指令文法檢測,從at -c 檢視指令執行内容看,如果有錯誤輸出&2,則會在目前螢幕輸出!

注意2:postfix郵件服務是否開啟,預設是開啟的,如果沒有受到郵件看下此服務的狀态資訊,看at -l有無郵件的發送!

疑惑:root和kiosk接受到了郵件資訊,但是自定義的使用者沒有接受到發送的郵件?

分析:由于su的切換,從at -c number來看,會繼承目前的環境變量等,是以要看頂層使用者的mail!

Linux基礎指令(十六)任務計劃at

七、原理分析

原理:指定好時間來執行任務,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的背景執行(第二段)

繼續閱讀