24.3. 使用 at 将作业计划在特定时间运行
若要计划一个称为作业的一次性任务以在指定时间运行一次,请使用 at
实用程序。
用户使用 at
实用程序指定 at 作业。然后,作业由 atd
服务执行。
24.3.1. at Jobs 的先决条件
在调度 at 作业前
:
安装 at 软件包:
~]# yum install at
安装时,已启用
atd
服务 - 设为在引导时自动启动。如果禁用该服务,启用该服务:~]# systemctl enable atd.service
为当前会话启动
atd
服务:~]# systemctl start atd.service
24.3.2. 调度 at 作业
作业始终由某些用户运行。以所需用户身份登录并运行:
~]# at time
使用时间规格替换 time。
有关指定时间的详情,请查看 at(1)手册页和
/usr/share/doc/at/timespec
文件。例 24.1. 指定 At 的时间
要在 15:00 执行作业,请运行:
~]# at 15:00
如果已传递指定时间,则下一日将同时执行该作业。
要在 2017 年 8 月 20 日执行该作业,请运行:
~]# at August 20 2017
或者
~]# at 082017
要从现在开始 5 天执行作业,请运行:
~]# now + 5 days
在显示
at>
提示符处,输入要执行的命令并按 Enter:~]# at 15:00 at> sh /usr/local/bin/my-script.sh at>
对您要执行的每个命令重复此步骤。
注意at>
提示符显示它将使用哪个 shell:warning: commands will be executed using /bin/sh
at 实用程序使用用户的 SHELL 环境变量或用户的登录 shell 或
/bin/sh
(以先到者为准)中设置的 shell。- 在空行中按 Ctrl+D 完成指定作业。
如果一组命令或脚本尝试显示标准输出的信息,则输出会通过电子邮件发送给用户。
查看待处理作业
要查看待处理作业列表,请使用 atq
命令:
~]# atq 26 Thu Feb 23 15:00:00 2017 a root 28 Thu Feb 24 17:30:00 2017 a root
每个作业都以以下格式在单独的行中列出:
job_number scheduled_date scheduled_hour job_class user_name
job_queue
列指定作业是 at 还是
批处理
作业。a
代表 at,
b
表示 批处理
。
非 root 用户仅查看其自己的作业。root 用户查看所有用户的作业。
删除调度的作业
删除调度的作业:
使用
atq
命令列出待处理的作业:~]# atq 26 Thu Feb 23 15:00:00 2017 a root 28 Thu Feb 24 17:30:00 2017 a root
- 查找您要删除的作业(按计划的时间和用户)。
运行
atrm
命令,按作业编号指定作业:~]# atrm 26
24.3.2.1. 控制对 At 和 Batch 的访问
您可以限制特定用户对 at
和 batch
命令的访问。要做到这一点,根据这些规则将用户名放在 /etc/at.allow
或 /etc/at.deny
中:
- 两种访问控制文件都使用相同的格式:每行一个用户名。
- 任一文件中均不允许使用空格。
-
如果
at.allow
文件存在,则仅该文件中列出的用户可以在 或批处理
中使用,并且
at.deny
文件将被忽略。 -
如果
at.allow
不存在,则at.deny
中列出的用户不得在或
批处理
中使用。 -
root
用户不受访问控制文件的影响,并且始终可以执行at
和批处理
命令。
如果修改了访问控制文件,则无需重新启动 at
守护进程(atd
)。每次用户尝试执行 at
或 batch
命令时,都会读取访问控制文件。