unix at命令詳解

longqidong發表於2012-12-17
a t命令允許使用者向c r o n守護程式提交作業,使其在稍後的時間執行。這裡稍後的時間可能是指1 0 m i n以後,也可能是指幾天以後。如果你希望在一個月或更長的時間以後執行,最好還是使用c r o n t a b檔案。一旦一個作業被提交, a t命令將會保留所有當前的環境變數,包括路徑,不象 c r o n t a b,只提供預設的環境。該作業的所有輸出都將以電子郵件的形式傳送給使用者,除非你對其輸出進行了重定向,絕大多數情況下是重定向到某個檔案中。和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的使用限制那麼嚴格。


a t命令的基本形式為:
at [-f script] [-m -l -r] [time] [date]
其中,
-f script.   是所要提交的指令碼或命令。
-l   列出當前所有等待執行的作業。a t q命令具有相同的作用。
-r   清除作業。為了清除某個作業,還要提供相應的作業標識( I D);有些U N I X變體只接受a t r m作為清除命令。
-m   作業完成後給使用者發郵件。
time   at命令的時間格式非常靈活;可以是 H、H H . H H M M、H H : M M或H : M,其中H和M分別是小時和分鐘。還可以使用a . m .或p . m .。
date   日期格式可以是月份數或日期數,而且a t命令還能夠識別諸如t o d a y、t o m o r r o w這樣的詞。

使用at命令提交命令或指令碼:
使用a t命令提交作業有幾種不同的形式,可以透過命令列方式,也可以使用 a t命令提示符。一般來說在提交若干行的系統命令時,我使用 a t命令提示符方式,而在提交s h e l l指令碼時,使用命令列方式。
如果你想提交若干行的命令,可以在a t命令後面跟上日期/時間並回車。然後就進入了a t命令提示符,這時只需逐條輸入相應的命令,然後按‘ < C T R L - D >’退出。下面給出一個例子:

at 21:00

at>find / –name “passwd” –print

at>

warning:commands will be executed using /bin/sh

job 1 at 2011-08-03  21:10 
其中,< E O T >就是< C T R L - D >。在2 1 : 1 0系統將執行一個簡單的 f i n d命令。你應當已經注
意到,我所提交的作業被分配了一個唯一標識 job 1。該命令在完成以後會將全部結果以郵件
的形式傳送給我。
下面就是我從這個郵件中擷取的一部分:

Subject:Output from your job      1

/etc/passwd

/etc/pam.d/passwd

/etc/uucp/passwd

/tmp/passwd

/root/passwd

/usr/bin/passwd

/usr/doc/uucp-1.06.1/sample/passwd
下面這些日期/時間格式都是a t命令可以接受的:

At 6.45am May12

At 11.10pm

At now + 1 hour

At 9am tomorrow

At 15:00 May 24

At now +10 minutes – this time specification is my own favourite.

如果希望向a t命令提交一個s h e l l指令碼,使用其命令列方式即可。在提交指令碼時使用- f選項。

at 3.00pm tomorrow –f /app/proc/create.sh

warning:commands will be executed using /bin/sh

job 8 at 2011-08-03  15:00

在上面的例子中,一個叫做create.sh的指令碼將在明天下午3 : 0 0執行。
還可以使用e c h o命令向a t命令提交作業:
$ echo find /etc -name "passwd" -print | at now +1 min
3.3.2   列出所提交的作業
一個作業被提交後,可以使用at -l命令來列出所有的作業:

zjtst1-bg-proc%at -l
2       2011-08-03 16:00 a proc

其中,第一行是作業標識,後面是作業執行的日期 /時間。最後一列a代表a t。還可以使用
a t q命令來完成同樣的功能,它是 a t命令的一個連結。當提交一個作業後,它就被複製到
/ v a r / s p o o l / cron/atjobs目錄中,在裡面會看到以任務ID命令的檔案,透過cat可以檢視到
具體的檔案內容,從而獲取at任務具體執行的指令碼或者命令。

清除一個作業
清除作業的命令格式為:
atrm [job no]  或at -r [job no]
要清除某個作業,首先要執行at -l命令,以獲取相應的作業標識,然後對該作業標識使用
at -r命令,清除該作業。

zjtst1-bg-proc%at -l
2       2011-08-03 16:00 a proc
3       2011-08-03 17:00 a proc
zjtst1-bg-proc%atrm job 2
zjtst1-bg-proc%at -l
3       2011-08-03 17:00 a proc
zjtst1-bg-proc%at -r job 3
zjtst1-bg-proc%at -l
zjtst1-bg-proc%

有些系統使用at-r [job no]命令清除作業。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22418990/viewspace-751204/,如需轉載,請註明出處,否則將追究法律責任。