Linux後台運行命令第二講,這裡介紹at命令,這個命令與cron有一定的關係,這裡還會詳細介紹at命令的使用方法。我們應該對Linux後台運行命令加以比較分析,可以看出at與cron和crontab命令的區別。
at
a t命令允許使用者向c r o n守護進程提交作業,使其在稍後的時間運行。一旦一個作業被提交, 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 [-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系統將執行一個簡單的f i n d命令。提交的作業被分配了一個唯一標識job 1。該命令在完成以後會將全部結果以郵件的形式發送給我。
下面這些日期/時間格式都是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命令提交一個s h e l l指令碼,使用其命令列方式即可。在提交指令碼時使用- f選項。
如:
$ 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
在上面的例子中,一個叫做d b _ t a b l e . s h的指令碼將在2004-11-02 15:00運行。
還可以使用e c h o命令向a t命令提交作業:
$ 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
列出所提交的作業
一個作業被提交後,可以使用at -l命令來列出所有的作業:
$ 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
其中,第一行是作業標識,後面是作業啟動並執行日期/時間。最後一列a代表a t。
還可以使用a t q命令來完成同樣的功能,它是a t命令的一個連結。
直接>atq,相當於>at -l
當提交一個作業後,它就被拷貝到/ v a r / s p o o l / a t目錄中,準備在要求的時間運行。
# pwd
/var/spool/at
# ls -l
清除一個作業
清除作業的命令格式為:
atrm [job no] 或at -r [job no]
要清除某個作業,首先要執行at -l命令,以擷取相應的作業標識,然後對該作業標識使用at -r 命令,清除該作業。
$ 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
有些系統使用at-r [job no]命令清除作業。
Linux後台運行命令at就介紹到這裡。
- 詳述Linux後台運行命令一)
- 關於Linux核心安全入侵偵察系統的使用問題
- 全面解析Linux profile檔案
- 詳細剖析Linux進程調度時機
- 詳細剖析Linux防火牆配置