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當指定的任務被完成後,將給使用者傳送郵件,即使沒有標準輸出
-iatq的別名
-datrm的別名
-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 />
job 1 at fri jun 14 17:00:00 2019
案例2:明天17點鐘,輸出時間到指定檔案內
命令:
[root@vms002 /]# at 17:00 tomorrow
at> date > /root/date.log
at> >
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
2023年 06月 11日 星期二 15:46:55 cst
[root@vms002 /]# date
2023年 06月 11日 星期二 15:47:47 cst
[root@vms002 /]# date
2023年 06月 11日 星期二 15:48:02 cst
[root@vms002 /]# cat /root/date.log #一分鐘後檢視/root/date.log檔案中內容,驗證計畫任務是否執行了。
2019-06-11 15:47:00
linux定時任務
crontab 設定定時任務 crontab 可以根據分鐘 小時 日期 月份 星期的組合來設定定時任務的自動執行 要使用該服務必須啟動 crond 服務,檢視 crond 服務有沒有啟動,執行命令 servicecrond status 一些任務事例,幫助理解 3020 root back.sh 每...
linux 定時任務
如果想要半夜在linux上備份oracle使用定時命令是最好不過的啦,下面整理了一下linux上的定時任務,可以參考一下 包括一次性的定時at,和長期的定時cron。cron設定 cron長期定時 cron是linux的內建服務,不會自動啟動 service crond start stop sta...
Linux定時任務
為當前使用者建立cron服務 1.鍵入 crontab e 編輯crontab服務檔案 例如 檔案內容如下 2 bin sh home admin jiaoben buy deletefile.sh 儲存檔案並並退出 2 bin sh home admin jiaoben buy deletefil...