linux at命令使用案例
linux at命令
用戶使用linux at命令在指定時(shí)刻執(zhí)行指定的命令序列。也就是說,該命令至少需要指定一個(gè)命令、一個(gè)執(zhí)行時(shí)間才能夠正常運(yùn)行。linux at命令能夠只指定時(shí)間,也能夠時(shí)間和日期一起指定。需要注意的是,指定時(shí)間有個(gè)系統(tǒng)判別問題。比如說:用戶現(xiàn)在指定了一個(gè)執(zhí)行時(shí)間:凌晨3:20,而發(fā)出linux at命令的時(shí)間是頭天晚上的20:00,那么究竟是在哪一天執(zhí)行該命令呢?假如用戶在3:20以前仍然在工作,那么該命令將在這個(gè)時(shí)候完成;假如用戶3:20以前就退出了工作狀態(tài),那么該命令將在第二天凌晨才得到執(zhí)行。下面是linux at命令的語法格式:
at [-V] [-q 隊(duì)列] [-f 文檔名] [-mldbv] 時(shí)間
at -c 作業(yè) [作業(yè)...]
at允許使用一套相當(dāng)復(fù)雜的指定時(shí)間的方法,實(shí)際上是將POSIX.2標(biāo)準(zhǔn)擴(kuò)展了。他能夠接受在當(dāng)天的hh:mm(小時(shí):分鐘)式的時(shí)間指定。假如該時(shí)間已過去,那么就放在第二天執(zhí)行。當(dāng)然也能夠使用midnight(深夜),noon(中午),teatime(飲茶時(shí)間,一般是下午4點(diǎn))等比較模糊的
詞語來指定時(shí)間。用戶還能夠采用12小時(shí)計(jì)時(shí)制,即在時(shí)間后面加上AM(上午)或PM(下午)來說明是上午還是下午。
也能夠指定命令執(zhí)行的具體日期,指定格式為month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。指定的日期必須跟在指定時(shí)間的后面。
上面介紹的都是絕對(duì)計(jì)時(shí)法,其實(shí)還能夠使用相對(duì)計(jì)時(shí)法,這對(duì)于安排不久就要執(zhí)行的命令是很有好處的。指定格式為:now + count time-units ,now就是當(dāng)前時(shí)間,time-units是時(shí)間單位,這里能夠是minutes(分鐘)、hours(小時(shí))、days(天)、weeks(星期)。count是時(shí)間的數(shù)量,究竟是幾天,還是幾小時(shí),等等。
更有一種計(jì)時(shí)方法就是直接使用today(今天)、tomorrow(明天)來指定完成命令的時(shí)間。下面通過一些例子來說明具體用法。
[例2] 指定在今天下午5:30執(zhí)行某命令。假設(shè)現(xiàn)在時(shí)間是中午12:30,1999年2月24日,其命令格式如下:
at 5:30pm
at 17:30
at 17:30 today
at now + 5 hours
at now + 300 minutes
at 17:30 24.2.99
at 17:30 2/24/99
at 17:30 Feb 24
以上這些命令表達(dá)的意義是完全相同的,所以在安排時(shí)間的時(shí)候完***夠根據(jù)個(gè)人喜好和具體情況自由選擇。一般采用絕對(duì)時(shí)間的24小時(shí)計(jì)時(shí)法能夠避免由于用戶自己的疏忽造成計(jì)時(shí)錯(cuò)誤的情況發(fā)生,例如上例能夠?qū)懗桑?/P>
at 17:30 2/24/99
這樣很清楚,而且別人也看得懂。
對(duì)于linux at命令來說,需要定時(shí)執(zhí)行的命令是從標(biāo)準(zhǔn)輸入或使用-f選項(xiàng)指定的文檔中讀取并執(zhí)行的。假如linux at命令是從一個(gè)使用su命令轉(zhuǎn)換到用戶shell中
執(zhí)行的,那么當(dāng)前用戶被認(rèn)為是執(zhí)行用戶,任何的錯(cuò)誤和輸出結(jié)果都會(huì)送給這個(gè)用戶。但是假如有郵件送出的話,收到郵件的將是原來的用戶,也就是登錄時(shí)shell的任何者。
[例3]
$ at -f work 4pm + 3 days
在三天后下午4點(diǎn)執(zhí)行文檔work中的作業(yè)。
$ at -f work 10am Jul 31
在7月31日上午10點(diǎn)執(zhí)行文檔work中的作業(yè)。
在任何情況下,***用戶都能夠使用這個(gè)命令。對(duì)于其他用戶來說,是否能夠使用就取決于兩個(gè)文檔:/etc/at.allow和/etc/at.deny。
假如/etc/at.allow文檔存在的話,那么只有在其中列出的用戶才能夠使用linux at命令;假如該文檔不存在,那么將檢查/etc/at.deny文檔
是否存在,在這個(gè)文檔中列出的用戶均不能使用該命令。假如兩個(gè)文檔都不存在,那么只有***用戶能夠使用該命令;空的/etc/at.deny文檔意味著所有的用戶都能夠使用該命令,這也是默認(rèn)狀態(tài)。
#p#下面對(duì)命令中的參數(shù)進(jìn)行說明。
-V 將標(biāo)準(zhǔn)版本號(hào)打印到標(biāo)準(zhǔn)錯(cuò)誤中。
-q queue 使用指定的隊(duì)列。隊(duì)列名稱是由單個(gè)字母組成,合法的隊(duì)列名能夠由a-z或A-Z。a隊(duì)列是linux at命令的默認(rèn)隊(duì)列。
-m 作業(yè)結(jié)束后發(fā)送郵件給執(zhí)行l(wèi)inux at命令的用戶。
-f file 使用該選項(xiàng)將使命令從指定的file讀取,而不是從標(biāo)準(zhǔn)輸入讀取。
-l atq命令的一個(gè)別名。該命令用于查看安排的作業(yè)序列,他將列出用戶排在隊(duì)列中的作業(yè),假如是***用戶,則列出隊(duì)列中的任何工作。
命令的語法格式如下:
atq [-V] [-q 隊(duì)列] [-v]
-d atrm 命令的一個(gè)別名。該命令用于刪除指定要執(zhí)行的命令序列,語法格式如下:
atrm [-V] 作業(yè) [作業(yè)...]
-c 將命令行上所列的作業(yè)送到標(biāo)準(zhǔn)輸出。
[例4] 找出系統(tǒng)中任何以txt為后綴名的文檔,并且進(jìn)行打印。打印結(jié)束后給用戶foxy發(fā)出郵件通知取件。指定時(shí)間為十二月二十五日凌晨?jī)牲c(diǎn)。
首先鍵入:
$ at 2:00 12/25/99
然后系統(tǒng)出現(xiàn)at>提示符,等待用戶輸入進(jìn)一步的信息,也就是需要執(zhí)行的命令序列:
at> find / -name "*.txt"|lpr
at> echo "foxy:All texts have been printed.You can take them over.Good day!River" |mail -s "job done" foxy
輸入完每一行指令然后回車,任何指令序列輸入完畢后,使用組合鍵結(jié)束linux at命令的輸入。這時(shí)候屏幕將出現(xiàn)如下信息:
warning:command will be executed using /bin/sh.
job 1 at 1999-12-25 02:00
提醒用戶將使用哪個(gè)shell來執(zhí)行該命令序列。
實(shí)際上假如命令序列較長(zhǎng)或經(jīng)常被執(zhí)行的時(shí)候,一般都采用將該序列寫到一個(gè)文檔中,然后將文檔作為linux at命令的輸入來處理。這樣不容易出錯(cuò)。
[例5] 上面的例子能夠修改如下:
將命令序列寫入到文檔/tmp/printjob,語句為:
$ at -f /tmp/printjob 2:00 12/25/99
這樣一來,linux at命令將使用文檔中的命令序列,屏幕顯示如下:
Warning:command will be executed using /bin/sh.
job 2 at 1999-12-25 02:00
/sbin/service crond start //啟動(dòng)服務(wù)
/sbin/service crond stop //關(guān)閉服務(wù)
/sbin/service crond restart //重啟服務(wù)
/sbin/service crond reload //重新載入配置
可以將這個(gè)服務(wù)在系統(tǒng)啟動(dòng)的時(shí)候也自動(dòng)啟動(dòng):
在/etc/rc.d/rc.local這個(gè)腳本的末尾加上:
/sbin/service crond start
以上是linux at命令的使用案例。
【編輯推薦】