24.3. 使用 at 将作业计划在特定时间运行
若要计划一个称为作业的一次性任务以在指定时间运行一次,请使用 at
实用程序。
用户使用 at
实用程序指定 at 作业。然后,作业由 atd
服务执行。
24.3.1. at Jobs 的先决条件 复制链接链接已复制到粘贴板!
在调度 at 作业前
:
安装 at 软件包:
yum install at
~]# yum install at
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 安装时,已启用
atd
服务 - 设为在引导时自动启动。如果禁用该服务,启用该服务:systemctl enable atd.service
~]# systemctl enable atd.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为当前会话启动
atd
服务:systemctl start atd.service
~]# systemctl start atd.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
24.3.2. 调度 at 作业 复制链接链接已复制到粘贴板!
作业始终由某些用户运行。以所需用户身份登录并运行:
at time
~]# at time
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用时间规格替换 time。
有关指定时间的详情,请查看 at(1)手册页和
/usr/share/doc/at/timespec
文件。例 24.1. 指定 At 的时间
要在 15:00 执行作业,请运行:
at 15:00
~]# at 15:00
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果已传递指定时间,则下一日将同时执行该作业。
要在 2017 年 8 月 20 日执行该作业,请运行:
at August 20 2017
~]# at August 20 2017
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者
at 082017
~]# at 082017
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要从现在开始 5 天执行作业,请运行:
now + 5 days
~]# now + 5 days
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在显示
at>
提示符处,输入要执行的命令并按 Enter:at 15:00
~]# at 15:00 at> sh /usr/local/bin/my-script.sh at>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对您要执行的每个命令重复此步骤。
注意at>
提示符显示它将使用哪个 shell:warning: commands will be executed using /bin/sh
warning: commands will be executed using /bin/sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow at 实用程序使用用户的 SHELL 环境变量或用户的登录 shell 或
/bin/sh
(以先到者为准)中设置的 shell。- 在空行中按 Ctrl+D 完成指定作业。
如果一组命令或脚本尝试显示标准输出的信息,则输出会通过电子邮件发送给用户。
查看待处理作业
要查看待处理作业列表,请使用 atq
命令:
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_number scheduled_date scheduled_hour job_class user_name
job_queue
列指定作业是 at 还是
批处理
作业。a
代表 at,
b
表示 批处理
。
非 root 用户仅查看其自己的作业。root 用户查看所有用户的作业。
删除调度的作业
删除调度的作业:
使用
atq
命令列出待处理的作业:atq
~]# atq 26 Thu Feb 23 15:00:00 2017 a root 28 Thu Feb 24 17:30:00 2017 a root
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 查找您要删除的作业(按计划的时间和用户)。
运行
atrm
命令,按作业编号指定作业:atrm 26
~]# atrm 26
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
命令时,都会读取访问控制文件。