UNIX学习笔记(六) 后台执行命令2 at命令

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><EOT>

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 / a t目录中,准备在要求的时间运行。

清除一个作业
清除作业的命令格式为:
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]命令清除作业。

posted @ 2011-08-05 16:08  kevinboy  阅读(703)  评论(0编辑  收藏  举报