37.2. at 和 batch

cron 被用来调度重复的任务,at 命令被用来在指定时间内调度一次性的任务。batch 命令被用来在系统平均载量降到 0.8 以下时执行一次性的任务。

要使用 atbatch 命令,你必须安装了 at RPM 软件包,并且 atd 服务必须在运行。要判定该软件包是否被安装了,使用 rpm -q at 命令。要判定该服务是否在运行,使用 /sbin/service atd status 命令。

37.2.1. 配置 at 作业

要在某一指定时间内调度一项一次性作业,键入 at time 命令。这里的 time 是执行命令的时间。

time 参数可以是下面格式中任何一种:

时间必须要被先指定,接着是可有可无的日期。关于时间格式的详情,请阅读 /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. 查看等待运行的作业

要查看等待运行的 atbatch 作业,使用 atq 命令。它显示一列等待运行的作业,每项作业只占据一行。每一行的格式都是:作业号码、日期、小时、作业类别、以及用户名。用户只能查看他们自己的作业。如果根用户执行 atq 命令,所有用户的全部作业都会被显示。

37.2.4. 其它的命令行选项

atbatch 的其它命令行选项包括:

选项描述
-f从文件中读取命令或 shell 脚本,而非在提示后指定它们。
-m在作业完成后,给用户发送电子邮件。
-v显示作业将被执行的时间。

表 37-1. atbatch 的命令行选项

37.2.5. 控制对 at 和 batch 的使用

/etc/at.allow/etc/at.deny 文件可以用来限制对 atbatch 命令的使用。这两个使用控制文件的格式都是每行一个用户。两个文件都不允许使用空白字符。如果使用控制文件被修改了,at 守护进程(atd) 不必被重启。每次用户试图执行 atbatch 命令时,使用控制文件都会被读取。

不论使用控制文件如何规定,根用户都总是可以执行 atbatch 命令。

如果 at.allow 文件存在,只有其中列出的用户才能使用 atbatch 命令,at.deny 文件会被忽略。

如果 at.allow 文件不存在,所有在 at.deny 文件中列出的用户都被禁止使用 atbatch 命令。

37.2.6. 启动和停止服务

要启动 at 服务,使用 /sbin/service atd start 命令。要停止该服务, 使用 /sbin/service atd stop 命令。建议你在引导时启动该服务。关于在引导时自动启动 at 服务的详情,请参阅第21章