在 Oracle® Solaris 11.2 中管理系统信息、进程和性能

退出打印视图

更新时间: 2014 年 9 月
 
 

调度单个系统任务 (at)

    以下各节介绍如何使用 at 命令来执行下列任务:

  • 调度作业(命令和脚本)供以后执行

  • 显示和删除作业

  • 控制对 at 命令的访问

缺省情况下,用户可以创建、显示和删除自己的 at 作业文件。要访问属于 root 或其他用户的 at 文件,您必须承担 root 角色。

提交 at 作业文件

提交 at 作业时,会为该作业指定作业标识号和 .a 扩展名。此指定将成为该作业的文件名,以及其队列编号。

提交 at 作业文件需执行以下步骤:

  1. 调用 at 实用程序并指定命令执行时间。

  2. 键入以后要执行的命令或脚本。


    注 -  如果此命令或脚本的输出很重要,请确保将输出定向到一个文件中,以便以后检查。

例如,以下 at 作业将在 7 月的最后一天接近午夜时删除用户帐户 smithcore 文件。

$ at 11:45pm July 31
at> rm /home/smith/*core*
at> Press Control-d
commands will be executed using /bin/csh
job 933486300.a at Tue Jul 31 23:45:00 2004

创建 at 作业

以下任务介绍如何创建和 at 作业。

如何创建 at 作业

  1. 启动 at 实用程序,指定所需的作业执行时间。
    $ at [-m] time [date] 
    -m

    指定此选项将在作业完成之后向您发送一封电子邮件。

    time

    指定要调度作业的小时。如果不按 24 小时制指定小时,请添加 ampm。可接受的关键字包括 midnightnoonnow。分钟是可选的选项。

    date

    指定月份的前三个或更多字母、一周中的某日或关键字 todaytomorrow

  2. at 提示符下,键入要执行的命令或脚本,每行一个。

    通过在每行结尾处按回车键,可以键入多个命令。

  3. 按 Ctrl-D 组合键,以退出 at 实用程序并保存 at 作业。

    at 作业将被指定一个队列编号,它也是该作业的文件名。退出 at 实用程序时将显示该编号。

示例 4-7  创建 at 作业

以下示例显示了用户 jones 创建的 at 作业,该作业用于在下午 7:30 删除其备份文件。由于她使用了 –m 选项,因此她会在该作业完成后收到电子邮件。

$ at -m 1930
at> rm /home/jones/*.backup
at> Press Control-D
job 897355800.a at Thu Jul  12 19:30:00 2004

她收到一封确认已执行 at 作业的电子邮件。

Your “at” job “rm /home/jones/*.backup”
completed.

以下示例说明 jones 如何调度在星期六凌晨 4:00 执行的大型 at 作业。该作业输出被定向到名为 big.file 的文件中。

$ at 4 am Saturday
at> sort -r /usr/dict/words > /export/home/jones/big.file

显示 at 队列

要检查在 at 队列中等待的作业,请使用 atq 命令。

$ atq

此命令可以显示您已创建的 at 作业的状态信息。

验证 at 作业

要验证您是否已创建了 at 作业,请使用 atq 命令。在以下示例中,atq 命令确认已将属于 jonesat 作业提交至队列。

$ atq
Rank	  Execution Date     Owner     Job         Queue   Job Name
  1st   Jul 12, 2004 19:30   jones  897355800.a     a     stdin
  2nd   Jul 14, 2004 23:45   jones  897543900.a     a     stdin
  3rd   Jul 17, 2004 04:00   jones  897732000.a     a     stdin

显示 at 作业

要显示有关 at 作业的执行时间信息,请使用 at -l 命令。

$ at -l [job-id]

其中,–l job-id 是您希望显示其状态的特定作业的可选标识号。如果没有 ID,命令将显示用户已提交的所有作业的状态。

示例 4-8  显示 at 作业

以下示例显示 at -l 命令的示例输出,该输出提供有关用户已提交的所有作业的状态信息。

$ at -l
897543900.a	Sat Jul 14 23:45:00 2004
897355800.a	Thu Jul 12 19:30:00 2004
897732000.a	Tue Jul 17 04:00:00 2004

以下示例显示使用 at -l 命令指定单个作业时所显示的示例输出。

$ at -l 897732000.a
897732000.a		Tue Jul 17 04:00:00 2004

如何删除 at 作业

开始之前

承担 root 角色以删除属于 root 或其他用户的 at 作业。请参见在 Oracle Solaris 11.2 中确保用户和进程的安全 中的使用所指定的管理权限

您无需承担 root 角色即可删除自己的 at 作业。

  1. 在作业执行之前从队列中删除 at 作业。
    # at -r [job-id]

    其中,–r job-id 选项指定要删除的作业的标识号。

  2. 使用 at -l(或 atq)命令,验证是否已删除 at 作业。

    at -l 命令显示 at 队列中剩余的作业。不应显示已指定标识号的作业。

    $ at -l [job-id]
示例 4-9  删除 at 作业

在以下示例中,用户要删除计划在 7 月 17 日凌晨 4 点执行的 at 作业。首先,该用户显示 at 队列,以找到作业标识号。然后,用户从 at 队列中删除此作业。最后,该用户验证是否已从队列中删除此作业。

$ at -l
897543900.a	Sat Jul 14 23:45:00 2003
897355800.a	Thu Jul 12 19:30:00 2003
897732000.a	Tue Jul 17 04:00:00 2003
$ at -r 897732000.a
$ at -l 897732000.a
at: 858142000.a: No such file or directory

控制对 at 命令的访问

您可以设置一个文件来控制对 at 命令的访问,只允许指定的用户创建、删除或显示有关 at 作业的队列信息。控制对 at 命令的访问的文件 /etc/cron.d/at.deny 由用户名列表构成,每个用户名占据一行。此文件中列出的用户不能访问 at 命令。

在 Oracle Solaris 软件安装期间创建的 at.deny 文件包含以下用户名:

daemon
bin
smtp
nuucp
listen
nobody
noaccess

使用超级用户特权,您可以编辑 at.deny 文件,以添加要限制其对 at 命令访问的其他用户名。

拒绝访问 at 命令

作为 root 身份编辑 /etc/cron.d/at.deny 文件,以添加希望禁止其使用 at 命令的用户名,每行一个用户名。

daemon
bin
smtp
nuucp
listen
nobody
noaccess
username1
username2
username3
.
.
.
示例 4-10  拒绝 at 访问

以下示例显示了一个 at.deny 文件,该文件已被编辑过,因此用户 smithjones 无法访问 at 命令。

$ cat at.deny
daemon
bin
smtp
nuucp
listen
nobody
noaccess
jones
smith
验证是否已拒绝访问 at 命令

要验证是否将用户名正确添加到 /etc/cron.d/at.deny 文件,请在作为该用户登录并使用 at -l 命令。例如,如果登录用户 smith 无法访问 at 命令,则显示以下消息:

# su smith
Password:
# at -l
at: you are not authorized to use at.  Sorry.

类似地,如果该用户尝试提交 at 作业,则将显示以下消息:

# at 2:30pm
at: you are not authorized to use at.  Sorry.

此消息确认该用户已列在 at.deny 文件中。

如果允许访问 at 命令,则 at -l 命令不会返回任何内容。