Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

24.3. 使用 at 将作业计划在特定时间运行

若要计划一个称为作业的一次性任务以在指定时间运行一次,请使用 at 实用程序。

用户使用 at 实用程序指定 at 作业。然后,作业由 atd 服务执行。

24.3.1. at Jobs 的先决条件

在调度 at 作业前

  1. 安装 at 软件包:

    ~]# yum install at
  2. 安装时,已启用 atd 服务 - 设为在引导时自动启动。如果禁用该服务,启用该服务:

    ~]# systemctl enable atd.service
  3. 为当前会话启动 atd 服务:

    ~]# systemctl start atd.service

24.3.2. 调度 at 作业

  1. 作业始终由某些用户运行。以所需用户身份登录并运行:

    ~]# 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
  2. 在显示 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。

  3. 在空行中按 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 用户查看所有用户的作业。

删除调度的作业

删除调度的作业:

  1. 使用 atq 命令列出待处理的作业:

    ~]# atq
    26   Thu Feb 23 15:00:00 2017 a root
    28   Thu Feb 24 17:30:00 2017 a root
  2. 查找您要删除的作业(按计划的时间和用户)。
  3. 运行 atrm 命令,按作业编号指定作业:

    ~]# atrm 26

24.3.2.1. 控制对 At 和 Batch 的访问

您可以限制特定用户对 atbatch 命令的访问。要做到这一点,根据这些规则将用户名放在 /etc/at.allow/etc/at.deny 中:

  • 两种访问控制文件都使用相同的格式:每行一个用户名。
  • 任一文件中均不允许使用空格。
  • 如果 at.allow 文件存在,则仅该文件中列出的用户可以在 或 批处理 中使用,并且 at.deny 文件将被忽略。
  • 如果 at.allow 不存在,则 at.deny 中列出的用户不得在 批处理 中使用。
  • root 用户不受访问控制文件的影响,并且始终可以执行 at批处理 命令。

如果修改了访问控制文件,则无需重新启动 at 守护进程(atd)。每次用户尝试执行 atbatch 命令时,都会读取访问控制文件。