本文內容是對man at的翻譯和使用整理
- 在linux中crontab用於處理周期性的任務而at則是處理僅執行一次的任務
- at命令用於在指定時間執行命令
- at允許使用一套相當復雜的指定時間的方法,它能夠接受在當天的hh:mm(小時:分鍾)式的時間指定,假如該時間已過去,那么就放在第二天執行
- 可以使用midnight(深夜),noon(中午),teatime(飲茶時間,一般是下午4點)等比較模糊的詞語來指定時間
- 可以采用12小時計時制,即在時間后面加上AM(上午)或PM(下午)來說明是上午還是下午
- 能夠指定命令執行的具體日期,指定格式為month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定的日期必須跟在指定時間的后面
上面介紹的都是絕對計時法,其實還能夠使用相對計時法,這對於安排不久就要執行的命令是很有好處的
指定格式為:now + count time-units
- now就是當前時間,time-units是時間單位,這里能夠是minutes(分鍾)、hours(小時)、days(天)、weeks(星期)
- count是時間的數量,究竟是幾天,還是幾小時,等等
- 更有一種計時方法就是直接使用today(今天)、tomorrow(明天)來指定完成命令的時間
檢查at是否安裝
在使用前先使用whereis命令檢查at命令是否安裝,如果沒有安裝執行下面的yum命令進行安裝(安裝過程輸出內容省略)
[root@a ~]# yum provides at
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
at-3.1.10-48.el6.x86_64 : Job spooling tools
Repo : base
Matched from:
[root@a ~]# yum -y install at-3.1.10-48.el6.x86_64
開啟atd服務並設置開機自動啟動
centos6:
[root@a ~]# service atd start
Starting atd: [ OK ]
[root@a ~]# service atd status
atd (pid 1832) is running...
[root@a ~]# chkconfig --level 3 atd on
[root@a ~]# chkconfig --list | grep atd
atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
相關命令
- at:在特定的時間執行一次性的任務
- atq:列出用戶的計划任務,如果是超級用戶將列出所有用戶的任務,結果的輸出格式為:Job number, date, hour, queue, and username
- atrm:根據Job number刪除at任務
- batch:在系統負荷允許的情況下執行at任務,換言之,就是在系統空閑的情況下才執行at任務
命令選項
-m:當指定的任務被完成之后,將給用戶發送郵件,即使沒有標准輸出
-M:不發送郵件
-l:atq的別名
-d:atrm的別名
-r:atrm的別名
-v:顯示任務將被執行的時間,顯示的時間格式為:Thu Feb 20 14:50:00 1997
-c:打印任務的內容到標准輸出
-V:顯示版本信息
-q:后面加<隊列> 使用指定的隊列
-f:后面加<文件> 從指定文件讀入任務而不是從標准輸入讀入
-t:后面<時間參數> 以時間參數的形式提交要運行的任務
對隊列的補充:
- -q選項后面跟上隊列名稱將使用指定的隊列執行at任務
- 隊列名稱只包含一個字母,有效的隊列名稱取值范圍是:小寫字母a-z或大寫字母A-Z
- 在默認情況下a隊列作為at命令的默認隊列,b隊列作為batch命令的默認隊列
- 越大的字母在執行時擁有越高的優先級
- "="是作為特殊隊列保留給當前運行的at任務使用的
- 如果在創建at計划任務是使用大寫字母指定任務的隊列,該任務在執行的時候將被當做batch計划任務處理
- 使用atq查詢at任務時如果指定了隊列名稱,查詢的結果只會包含這個隊列下的任務
對-t選項的補充:
- -t選項的作用是在指定的time_arg時間參數對應的時刻執行at任務
- 這個參數后面的時間的格式必須和touch命令-t選項所需的時間的格式一致
- time_arg的格式為[[CC]YY]MMDDhhmm[.ss]
CC 指定年份的前兩位數字
YY 指定年份的后兩位數字
MM 指定一年的哪一月(從 01 到 12)
DD 指定一月的哪一天(從 01 到 31)
hh 指定一天中的哪一小時(從 00 到 23)
mm 指定一小時的哪一分鍾(從 00 到 59)
ss 指定一分鍾的哪一秒(從 00 到 59)
相關配置文件
- 時間規范的確切定義可以在/usr/share/doc/at-3.1.10/timespec中查看
- root用戶可以在任何情況下使用at命令,而其他用戶使用at命令的權限定義在/etc/at.allow和/etc/at.deny文件中
- 如果/etc/at.allow文件存在,只有在該文件中的用戶名對應的用戶才能使用at
- 如果/etc/at.allow文件不存在,/etc/at.deny存在,所有不在/etc/at.deny文件中的用戶可以使用at
- 如果/etc/at.allow和/etc/at.deny文件都不存在,只有root用戶能使用at
- 一個空內容的/etc/at.deny表示任何用戶都能使用at命令,這是默認的配置