linux定時任務 - at定時任務


  at命令是一次性定時計划任務,at的守護進程atd會以后台模式運行,檢查作業隊列來運行作業。atd守護進程會檢查系統上的一個特殊目錄來獲取at命令的提交的作業,默認情況下,atd守護進程每60秒檢查一次目錄,有作業時,會檢查作業運行時間,如果時間與當前時間匹配,則運行此作業。

    注意:at命令是一次性定時計划任務,執行完一個任務后不再執行此任務了。

1、at命令格式

at [選項] [時間] Ctrl + D 結束at命令的輸入
 

在使用at命令的時候,一定要保證atd進程的啟動。

[root@vms002 /]# ps -ef|grep -v grep|grep atd rpcuser 1550 1 0 6月10 ? 00:00:00 /usr/sbin/rpc.statd --no-notify root 1552 1 0 6月10 ? 00:00:00 /usr/sbin/atd -f
 

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 /

命令:

[root@vms002 /]# at 5pm+3 days at> /bin/ls /<EOT> job 1 at Fri Jun 14 17:00:00 2019
 

案例2:明天17點鍾,輸出時間到指定文件內

命令:

[root@vms002 /]# at 17:00 tomorrow at> date > /root/date.log at> <EOT> job 2 at Wed Jun 12 17:00:00 2019
 

案例3:計划任務設定后,在沒有執行之前我們可以用atq命令來查看系統中沒有執行的工作任務

命令:

[root@vms002 /]# atq 1 Fri Jun 14 17:00:00 2019 a root 2 Wed Jun 12 17:00:00 2019 a root
 

案例4:刪除已經設置的任務

命令:

[root@vms002 /]# atq 1 Fri Jun 14 17:00:00 2019 a root 2 Wed Jun 12 17:00:00 2019 a root [root@vms002 /]# atrm 1 [root@vms002 /]# atq 2 Wed Jun 12 17:00:00 2019 a root
 

案例5:顯示已經設置的任務內容

命令:

[root@vms002 /]# at -c 2 #!/bin/sh # atrun uid=0 gid=0 # mail root 0 umask 22 ******此處省略部分內容***** date > /root/date.log
 

    2)文件輸入:

任務:一分鍾后執行/tmp/date文件中的內容

命令:

[root@vms002 /]# cat /tmp/date #查看/tmp/date文件中內容 #!/bin/bash date "+%F %T" > /root/date.log [root@vms002 /]# at -f /tmp/date now +1 minutes #設置1分鍾后執行/tmp/date文件中的內容 job 4 at Tue Jun 11 15:47:00 2019 [root@vms002 /]# atq #查看計划任務是否設置成功 2 Wed Jun 12 17:00:00 2019 a root 4 Tue Jun 11 15:47:00 2019 a root [root@vms002 /]# date 2019年 06月 11日 星期二 15:46:55 CST [root@vms002 /]# date 2019年 06月 11日 星期二 15:47:47 CST [root@vms002 /]# date 2019年 06月 11日 星期二 15:48:02 CST [root@vms002 /]# cat /root/date.log #一分鍾后查看/root/date.log文件中內容,驗證計划任務是否執行了。 2019-06-11 15:47:00

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM