at 和 batch
时间:2006-07-07 来源:zqy2000zqy
37.2. at 和 batch
cron 被用来调度重复的任务,at 命令被用来在指定时间内调度一次性的任务。batch 命令被用来在系统平均载量降到 0.8 以下时执行一次性的任务。
要使用 at 或 batch 命令,你必须安装了 at RPM 软件包,并且 atd 服务必须在运行。要判定该软件包是否被安装了,使用 rpm -q at 命令。要判定该服务是否在运行,使用 /sbin/service atd status 命令。
37.2.1. 配置 at 作业
要在某一指定时间内调度一项一次性作业,键入 at time 命令。这里的 time 是执行命令的时间。
time 参数可以是下面格式中任何一种:
-
HH:MM 格式 — 譬如,04:00 代表 4:00AM。如果时间已过,它就会在第二天的这一时间执行。
-
midnight — 代表 12:00AM。
-
noon — 代表 12:00PM。
-
teatime — 代表 4:00PM。
-
英文月名 日期 年份 格式— 譬如,January 15 2002 代表 2002 年 1 月 15 日。年份可有可无。
-
MMDDYY、MM/DD/YY、或 MM.DD.YY 格式 — 譬如,011502 代表 2002 年 1 月 15 日。
-
now + 时间 — 时间以 minutes、hours、days、或 weeks 为单位。譬如,now + 5 days 代表命令应该在 5 天之后的此时此刻执行。
时间必须要被先指定,接着是可有可无的日期。关于时间格式的详情,请阅读 /usr/share/doc/at-<version> /timespec 文本文件。
键入了 at 命令和它的时间参数后,at> 提示就会出现。键入要执行的命令,按 [Enter] 键,然后键入 Ctrl-D。你可以指定多条命令, 方法是键入每一条命令后按 [Enter] 键。键入所有命令后,按 [Enter] 键转入一个空行,然后再键入 Ctrl-D。或者,你也可以在提示后输入 shell 脚本,在脚本的每一行后按 [Enter] 键,然后在空行处键入 Ctrl-D 来退出。如果输入的是脚本,所用的 shell 就会是用户的 SHELL 环境变量中设置的值,用户的登录 shell,或是 /bin/sh(使用最先发现的)。
如果这组命令或脚本试图在标准输出中显示信息,该输出会用电子邮件方式被邮寄给用户。
使用命令 atq 来查看等待运行的作业。详情请参阅第 37.2.3 节。
at 命令的用法能够被制约。详情请参阅 第 37.2.5 节。
37.2.2. 配置 batch 作业
要在系统平均载量降到 0.8 以下时执行某项一次性的任务,使用 batch 命令。
键入 batch 命令后,at> 提示就会出现。键入要执行的命令,按 [Enter] 键,然后键入 Ctrl-D。你可以指定多条命令,方法是键入每一条命令后按 [Enter] 键。键入所有命令后,按 [Enter] 键转入一个空行,然后再键入 Ctrl-D。或者, 你也可以在提示后输入 shell 脚本,在脚本的每一行后按 [Enter] 键,然后 在空行处键入 Ctrl-D 来退出。如果输入的是脚本,所用的 shell 就会是用户的 SHELL 环境变量中设置的值,用户的登录 shell,或是 /bin/sh(使用最先发现的)。系统平均载量一降到 0.8 以下,这组命令或脚本就会被执行。
如果这组命令或脚本试图在标准输出中显示信息,该输出会用电子邮件方式被邮寄给用户。
使用命令 atq 来查看等待运行的作业。详情请参阅第 37.2.3 节。
batch 命令的用法能够被制约。详情请参阅第 37.2.5 节。
37.2.3. 查看等待运行的作业
要查看等待运行的 at 和 batch 作业,使用 atq 命令。它显示一列等待运行的作业,每项作业只占据一行。每一行的格式都是:作业号码、日期、小时、作业类别、以及用户名。用户只能查看他们自己的作业。如果根用户执行 atq 命令,所有用户的全部作业都会被显示。
37.2.4. 其它的命令行选项
at 和 batch 的其它命令行选项包括:
选项 | 描述 |
---|---|
-f | 从文件中读取命令或 shell 脚本,而非在提示后指定它们。 |
-m | 在作业完成后,给用户发送电子邮件。 |
-v | 显示作业将被执行的时间。 |
表 37-1. at 和 batch 的命令行选项
37.2.5. 控制对 at 和 batch 的使用
/etc/at.allow 和 /etc/at.deny 文件可以用来限制对 at 和 batch 命令的使用。这两个使用控制文件的格式都是每行一个用户。两个文件都不允许使用空白字符。如果使用控制文件被修改了,at 守护进程(atd) 不必被重启。每次用户试图执行 at 或 batch 命令时,使用控制文件都会被读取。
不论使用控制文件如何规定,根用户都总是可以执行 at 和 batch 命令。
如果 at.allow 文件存在,只有其中列出的用户才能使用 at 或 batch 命令,at.deny 文件会被忽略。
如果 at.allow 文件不存在,所有在 at.deny 文件中列出的用户都被禁止使用 at 和 batch 命令。
37.2.6. 启动和停止服务
要启动 at 服务,使用 /sbin/service atd start 命令。要停止该服务, 使用 /sbin/service atd stop 命令。建议你在引导时启动该服务。关于在引导时自动启动 at 服务的详情,请参阅第21章 。
2
http://www.it055.com/it055_infos/server/server_system/3637_page1.htm
at命令可以让你指定特定的日期和时间来运行某个程序。举个例子,我可以在每天早上七点钟开始在我的CDROM上播放音乐:
at 7:00
cdplay <CTRL><D>
在以上例子,我在命令行里输入 “at 7:00”接着按回车。接着,at命令显示一个 “at> ”的提示符,然后我输入 “cdplay”接着按回车,最后,我同时按住<CTRL>和<D>结束输入。如果我接着按回车,另外一个“at> ”提示符出现,我可以接着输入那些我希望在早上7点钟运行的程序。然后在最后输入<CTRL><D>。<CTRL><D>就象是向当前的输入送一个文件结束符合,告诉输入已经完毕。不要连续按<CTRL><D>两次,否则你就自动退出系统了。
你可以使用以下命令列出当前在任务调度表里的任务:
at –l
你可以看到那些还在任务调度表里还在等待的程序的清单。
如果你改变主意,绝对把某个程序从任务调度表里删除。举例:
atrm 8
该命令将从任务调度表里删除命令编号为8的程序
我也可以安排一个程序在稍晚一点的时间运行,比如:
at 23:55 12/31/00
startx
该命令将在新千年夜晚启动我的X-Windows系统(2000年12月31日,午夜前5分钟)。
如果你不能运行at命令,查看一下是否任务调度服务程序(atd)已经被加载(可以使用root用户运行ntsysv加载)。如果at命令对root用户有效但是对于普通用户无效,检查一下是否文件/etc/at.deny是否存在,同时,确认文件/etc/at.allow不存在。这是所有用户可以运行at命令的缺省设置。如果你想要只有指定的用户才能够运行at命令,可以生成文件/etc/at.allow并且把用户的名单加到文件里。
对于at命令其他的可选项,运行
man at
当系统载荷很低的时候,如果你希望在后台运行一个“处理器饥渴型”的任务,你可以选择使用batch命令。举例,我可以运行setiathome(一个数据分析程序用来帮助寻找外部智能生命,SETI):
batch
at>setiathome <CTRL><D>
在以上例子里,我在命令行输入batch然后回车,在“at>”命令提示符下,我输入想要在后台运行的程序名称。程序试图立刻运行,但是其实会等到系统载荷小于0.8的时候才会开始运行。你可以通过检查虚拟文件/proc/loadavg来检查系统载荷:
cat /proc/loadavg
当批命令完成后,输出结果将会以电子邮件的方式送到我的信箱