at命令是一次性定時計划任務,at的守護進程atd會以后台模式運行,檢查作業隊列來運行作業。atd守護進程會檢查系統上的一個特殊目錄來獲取at命令的提交的作業,默認情況下,atd守護進程每60秒檢查一次目錄,有作業時,會檢查作業運行時間,如果時間與當前時間匹配,則運行此作業。
注意:at命令是一次性定時計划任務,執行完一個任務后不再執行此任務了。
1、at命令格式
在使用at命令的時候,一定要保證atd進程的啟動。
2、at命令參數
選項 | 含義 |
-m | 當指定的任務被完成后,將給用戶發送郵件,即使沒有標准輸出 |
-I | atq的別名 |
-d | atrm的別名 |
-v | 顯示任務將被執行的時間 |
-c | 打印任務的內容到標准輸出 |
-V | 顯示版本信息 |
-q <隊列> | 使用指定的隊列 |
-f <文件> | 從指定文件讀入任務而不是從標准輸入讀入 |
-t <時間參數> | 以時間參數的形式提交要運行的任務 |
3、時間定義
at允許使用一套相當復雜的指定時間的方法:
● 能夠接受在當天的hh:mm(小時:分鍾)式的時間指定。假如該時間已過去,那么就放在第二天執行。 例如:04:00
● 能夠使用midnight(深夜),noon(中午),teatime(飲茶時間,一般是下午4點)等比較模糊的詞語來指定時間。
● 能夠采用12小時計時制,即在時間后面加上AM(上午)或PM(下午)來說明是上午還是下午。 例如:12pm
● 能夠指定命令執行的具體日期,指定格式為month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定的日期必須跟在指定時間的后面。 例如:04:00 2009-03-1
● 能夠使用相對計時法。指定格式為:now + count time-units ,now就是當前時間,time-units是時間單位,這里能夠是minutes(分鍾)、hours(小時)、days(天)、weeks(星期)。count是時間的數量,幾天,幾小時。 例如:now + 5 minutes 04pm + 3 days
● 能夠直接使用today(今天)、tomorrow(明天)來指定完成命令的時間。
4、相關命令
1)at:在特定的時間執行一次性的任務;
2)atq:列出用戶的計划任務,如果是超級用戶將列出所有用戶的任務,結果的輸出格式為:作業號、日期、小時、隊列和用戶名;
3)atrm:根據job number刪除at任務;
4)batch:在系統負荷允許的情況下執行at任務,就是在系統空閑的情況下才執行at任務。
5、相關配置文件
1)時間規范的確切定義可以在/usr/share/doc/at-3.1.13/timespec中查看;
2)默認情況下計划任務都是存放在/var/spool/at/文件夾中;
3)root用戶可以在任何情況下使用at命令,而其他用戶使用at命令的權限定義在/etc/at.allow(被允許使用計划任務的用戶)和/etc/at.deny(被拒絕使用計划任務的用戶)文件中,默認沒有文件需要自己創建允許用戶和拒絕用戶文件;
4)如果/etc/at.allow文件存在,只有在該文件中的用戶名對應的用戶才能使用at;
5)如果/etc/at.allow文件不存在,/etc/at.deny存在,所有不在/etc/at.deny文件中的用戶可以使用at;
6)at.allow比at.deny優先級高,執行用戶是否可以執行at命令,先看at.allow文件中有沒有才看at.deny文件;
7)如果/etc/at.allow和/etc/at.deny文件都不存在,則只有root用戶能使用at;
8)一個空內容的/etc/at.deny表示任何用戶都能使用at命令,這是默認的配置;
9)一般情況下這兩個文件存在一個即可。如果只有少數幾個用戶需要使用計划任務,那么就保留at.allow文件,如果大部分用戶都要使用計划任務,那么保留at.deny即可。
6、使用案例
1)控制台輸入:
案例1:三天后的下午5點執行/bin/ls /
命令:
案例2:明天17點鍾,輸出時間到指定文件內
命令:
案例3:計划任務設定后,在沒有執行之前我們可以用atq命令來查看系統中沒有執行的工作任務
命令:
案例4:刪除已經設置的任務
命令:
案例5:顯示已經設置的任務內容
命令:
2)文件輸入:
任務:一分鍾后執行/tmp/date文件中的內容
命令: