詳述Linux后臺運(yùn)行命令(二)
Linux后臺運(yùn)行命令第二講,這里介紹at命令,這個(gè)命令與cron有一定的關(guān)系,這里還會詳細(xì)介紹at命令的使用方法。我們應(yīng)該對Linux后臺運(yùn)行命令加以比較分析,可以看出at與cron和crontab命令的區(qū)別。
at
a t命令允許用戶向c r o n守護(hù)進(jìn)程提交作業(yè),使其在稍后的時(shí)間運(yùn)行。一旦一個(gè)作業(yè)被提交, a t命令將會保留所有當(dāng)前的環(huán)境變量,包括路徑,不象c r o n t a b,只提供缺省的環(huán)境。該作業(yè)的所有輸出都將以電子郵件的形式發(fā)送給用戶,除非你對其輸出進(jìn)行了重定向,絕大多數(shù)情況下是重定向到某個(gè)文件中。
和c r o n t a b一樣,根用戶可以通過/ e t c目錄下的a t . a l l o w和a t . d e n y文件來控制哪些用戶可以使用a t命令,哪些用戶不行。不過一般來說,對a t命令的使用不如對c r o n t a b的使用限制那么嚴(yán)格。
a t命令的基本形式為:
at [-f script] [-m -l -r] [time] [date]
其中,
-f:script 是所要提交的腳本或命令。
-l:列出當(dāng)前所有等待運(yùn)行的作業(yè)。a t q命令具有相同的作用。
-r:清除作業(yè)。為了清除某個(gè)作業(yè),還要提供相應(yīng)的作業(yè)標(biāo)識( I D);有些U N I X變體只接受a t r m作為清除命令。
-m:作業(yè)完成后給用戶發(fā)郵件。
time:at命令的時(shí)間格式非常靈活;可以是H、H H . H H M M、H H : M M或H : M,其中H和M分別是小時(shí)和分鐘。還可以使用a . m .或p . m .。
date:日期格式可以是月份數(shù)或日期數(shù),而且a t命令還能夠識別諸如t o d a y、t o m o r r o w這樣的詞。
使用at命令提交命令或腳本
使用a t命令提交作業(yè)有幾種不同的形式,可以通過命令行方式,也可以使用a t命令提示符。一般來說在提交若干行的系統(tǒng)命令時(shí),使用a t命令提示符方式,在提交s h e l l腳本時(shí),使用命令行方式。
提示符方式:
以在a t命令后面跟上日期/時(shí)間并回車。然后就進(jìn)入了a t命令提示符,這時(shí)只需逐條輸入相應(yīng)的命令,然后按‘ < C T R L - D >’退出。
命令行方式:
at [-f script] [-m -l -r] [time] [date]
例一:提示符方式
# su sam
$ at 10:40
warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh
at> find /etc -name "passwd" -print
at> <EOT>
job 1 at 2004-11-02 10:40
其中, < E O T >就是< C T R L - D >。在10:40系統(tǒng)將執(zhí)行一個(gè)簡單的f i n d命令。提交的作業(yè)被分配了一個(gè)唯一標(biāo)識job 1。該命令在完成以后會將全部結(jié)果以郵件的形式發(fā)送給我。
下面這些日期/時(shí)間格式都是a t命令可以接受的:
at 5.00am May23
at 11.20pm
at now +2 hour
at 9am tomorrow
at 15:00 May24
at now + 10 minutes
例二:命令行方式
如果希望向a t命令提交一個(gè)s h e l l腳本,使用其命令行方式即可。在提交腳本時(shí)使用- f選項(xiàng)。
如:
$ touch db_table.sh
$ at 3:00pm tomorrow -f db_table.sh
warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh
job 3 at 2004-11-02 15:00
在上面的例子中,一個(gè)叫做d b _ t a b l e . s h的腳本將在2004-11-02 15:00運(yùn)行。
還可以使用e c h o命令向a t命令提交作業(yè):
$ echo find /etc -name "passwd" -print | at now +1 minute
warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh
job 4 at 2004-11-01 19:07
列出所提交的作業(yè)
一個(gè)作業(yè)被提交后,可以使用at -l命令來列出所有的作業(yè):
$ at -l
1 2004-11-02 10:40 a sam
3 2004-11-02 15:00 a sam
4 2004-11-01 19:07 a sam
其中,第一行是作業(yè)標(biāo)識,后面是作業(yè)運(yùn)行的日期/時(shí)間。最后一列a代表a t。
還可以使用a t q命令來完成同樣的功能,它是a t命令的一個(gè)鏈接。
直接>atq,相當(dāng)于>at -l
當(dāng)提交一個(gè)作業(yè)后,它就被拷貝到/ v a r / s p o o l / a t目錄中,準(zhǔn)備在要求的時(shí)間運(yùn)行。
# pwd
/var/spool/at
# ls -l
清除一個(gè)作業(yè)
清除作業(yè)的命令格式為:
atrm [job no] 或at -r [job no]
要清除某個(gè)作業(yè),首先要執(zhí)行at -l命令,以獲取相應(yīng)的作業(yè)標(biāo)識,然后對該作業(yè)標(biāo)識使用at -r 命令,清除該作業(yè)。
$ at -l
1 2004-11-02 10:40 a sam
3 2004-11-02 15:00 a sam
4 2004-11-01 19:07 a sam
$at -r 3
$at -l
1 2004-11-02 10:40 a sam
4 2004-11-01 19:07 a sam
有些系統(tǒng)使用at-r [job no]命令清除作業(yè)。
Linux后臺運(yùn)行命令at就介紹到這里。
【編輯推薦】