调度作业(命令和脚本)以供以后执行
如何显示和删除这些作业
如何控制对 at 命令的访问
缺省情况下,用户可以创建、显示和删除自己的 at 作业文件。要访问属于 root 或其他用户的 at 文件,您必须具有超级用户权限。
提交 at 作业时,会为该作业分配作业标识号和 .a 扩展名。此指定将成为该作业的文件名,以及其队列编号。
调用 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 作业的队列信息。控制对 at 命令的访问的文件 /etc/cron.d/at.deny 由用户名列表构成,每个用户名占据一行。此文件中列出的用户不能访问 at 命令。
在 SunOS 软件安装期间创建的 at.deny 文件包含以下用户名:
daemon bin smtp nuucp listen nobody noaccess |
使用超级用户权限,您可以编辑 at.deny 文件,以添加要限制其对 at 命令访问的其他用户名。
$ at [-m] time [date] |
在作业完成后发送邮件。
指定要调度作业的小时。如果不按 24 小时制指定小时,请添加 am 或 pm。可接受的关键字包括 midnight、noon 和 now。分钟是可选的选项。
指定月份的前三个或更多字母、一周中的某日或关键字 today 或 tomorrow。
在 at 提示符下,键入要执行的命令或脚本,每行一个。
通过在每行结尾处按回车键,可以键入多个命令。
按 Ctrl-D 组合键,以退出 at 实用程序并保存 at 作业。
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 |
要验证您是否已创建了 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 -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 或其他用户的 at 作业。角色包含授权和具有一定权限的命令。
无需成为超级用户或同等角色,便可删除自己的 at 作业。
在作业执行之前从队列中删除 at 作业。
$ at -r [job-id] |
其中,-r job-id 选项指定要删除的作业的标识号。
使用 at -l(或 atq)命令,验证是否已删除 at 作业。
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 |
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
编辑 /etc/cron.d/at.deny 文件并添加要禁止其使用 at 命令的用户名,每行一个用户名。
daemon bin smtp nuucp listen nobody noaccess username1 username2 username3 . . . |
以下示例显示了一个 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 命令不会返回任何内容。