缺省情况下,用户可以创建、显示和删除自己的 at 作业文件。要访问属于 root 或其他用户的 at 文件,您必须承担 root 角色。
提交 at 作业时,会为该作业指定作业标识号和 .a 扩展名。此指定将成为该作业的文件名,以及其队列编号。
提交 at 作业文件需执行以下步骤:
调用 at 实用程序并指定命令执行时间。
键入以后要执行的命令或脚本。
例如,以下 at 作业将在 7 月的最后一天接近午夜时删除用户帐户 smith 的 core 文件。
$ 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 [-m] time [date]
指定此选项将在作业完成之后向您发送一封电子邮件。
指定要调度作业的小时。如果不按 24 小时制指定小时,请添加 am 或 pm。可接受的关键字包括 midnight、noon 和 now。分钟是可选的选项。
指定月份的前三个或更多字母、一周中的某日或关键字 today 或 tomorrow。
通过在每行结尾处按回车键,可以键入多个命令。
at 作业将被指定一个队列编号,它也是该作业的文件名。退出 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
$ atq
此命令可以显示您已创建的 at 作业的状态信息。
要验证您是否已创建了 at 作业,请使用 atq 命令。在以下示例中,atq 命令确认已将属于 jones 的 at 作业提交至队列。
$ 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 -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
开始之前
承担 root 角色以删除属于 root 或其他用户的 at 作业。请参见在 Oracle Solaris 11.2 中确保用户和进程的安全 中的使用所指定的管理权限。
您无需承担 root 角色即可删除自己的 at 作业。
# at -r [job-id]
其中,–r job-id 选项指定要删除的作业的标识号。
at -l 命令显示 at 队列中剩余的作业。不应显示已指定标识号的作业。
$ at -l [job-id]
在以下示例中,用户要删除计划在 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 命令的访问的文件 /etc/cron.d/at.deny 由用户名列表构成,每个用户名占据一行。此文件中列出的用户不能访问 at 命令。
在 Oracle Solaris 软件安装期间创建的 at.deny 文件包含以下用户名:
daemon bin smtp nuucp listen nobody noaccess
使用超级用户特权,您可以编辑 at.deny 文件,以添加要限制其对 at 命令访问的其他用户名。
作为 root 身份编辑 /etc/cron.d/at.deny 文件,以添加希望禁止其使用 at 命令的用户名,每行一个用户名。
daemon bin smtp nuucp listen nobody noaccess username1 username2 username3 . . .示例 4-10 拒绝 at 访问
以下示例显示了一个 at.deny 文件,该文件已被编辑过,因此用户 smith 和 jones 无法访问 at 命令。
$ cat at.deny daemon bin smtp nuucp listen nobody noaccess jones smith
要验证是否将用户名正确添加到 /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 命令不会返回任何内容。