Linux之at命令

前言:bash

    at命令是一次性定時計劃任務,at的守護進程atd會之後臺模式運行,檢查做業隊列來運行做業。atd守護進程會檢查系統上的一個特殊目錄來獲取at命令的提交的做業,默認狀況下,atd守護進程每60秒檢查一次目錄,有做業時,會檢查做業運行時間,若是時間與當前時間匹配,則運行此做業。
ide

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

一、at命令格式spa

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

二、at命令參數進程

選項 含義
-m 當指定的任務被完成後,將給用戶發送郵件,即便沒有標準輸出
-I atq的別名
-d atrm的別名
-v 顯示任務將被執行的時間
-c 打印任務的內容到標準輸出
-V 顯示版本信息
-q <隊列> 使用指定的隊列
-f <文件> 從指定文件讀入任務而不是從標準輸入讀入
-t <時間參數> 以時間參數的形式提交要運行的任務

三、時間定義rpc

at容許使用一套至關複雜的指定時間的方法:it

● 可以接受在當天的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(明天)來指定完成命令的時間。table

四、相關命令class

    1)at:在特定的時間執行一次性的任務;

    2)atq:列出用戶的計劃任務,若是是超級用戶將列出全部用戶的任務,結果的輸出格式爲:做業號、日期、小時、隊列和用戶名;

    3)atrm:根據job number刪除at任務;

    4)batch:在系統負荷容許的狀況下執行at任務,就是在系統空閒的狀況下才執行at任務。

五、相關配置文件

    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便可。

六、使用案例

    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
相關文章
相關標籤/搜索