at 命令
用途
稍候运行命令。
语法
要调度作业在稍后运行
at[-c|-k|-s |-q Queue] [-m] [-f File] {-t Date |Time[Day ] [Increment ] }
要报告已调度作业
at -l[-v] [-o] [Job ... |-q Queue]
at -n[用户]
要除去已调度作业
描述
at 命令从标准输入读取稍后要运行的命令的名称并允许您指定何时应运行该命令。
除非您重定向,否则 at 命令将有关已调度命令的标准输出和标准错误发送给您。 它还将作业号和已调度时间写至标准错误。
当执行 at 命令时,它保留当前进程环境。 它不保留打开的文件描述符、陷阱和优先级。
/var/adm/cron/at.allow 和 /var/adm/cron/at.deny 文件控制哪些用户可以使用 at 命令。 具有 root 用户权限的用户可以创建、编辑或删除这些文件。 这些文件中的条目是用户登录名,每行一个名称。 以下是 at.allow 文件的示例:
root
nick
dee
sarah如果 at.allow 文件存在,只有其登录名存在于此文件中的用户可以使用 at 命令。 系统管理员可以通过在 at.deny 文件中列出用户登录名来显式地阻止该用户使用 at 命令。 如果只存在 at.deny 文件,任何其名称不出现在该文件中的用户可以使用 at 命令。
如果下列其中一项为真,那么用户不能使用 at 命令:
- at.allow 文件和 at.deny 文件不存在(仅允许 root 用户)。
- at.allow 文件存在,但用户登录名没有在文件中列出。
- at.deny 文件存在,且用户登录名列在其中。
如果 at.allow 文件不存在,且 at.deny 文件不存在,那么只有具有 root 用户权限的用户才能用 at 命令提交作业。
要安排作业稍后运行,您必须指定要启动此作业的时间。 可以通过使用 -t Date 标志或 Time、Day 和 Increment 参数来指定时间。 可将任意数目的作业安排为最多每秒运行 60 个。
使用以下格式指定-t标志的日期变量:
[[CC]YY]MMDDhhmm[.SS]
Date 变量中的数字如下定义:
| 项 | 描述 |
|---|---|
| CC | 指定年份的前两位数字(纪元)。 |
| YY | 指定年份的后两位数字。 |
| MM | 指定一年的月份(01 到 12)。 |
| DD | 指定一月中的具体日子(01 到 31)。 |
| hh | 指定一天的钟点(00 到 23)。 |
| mm | 指定一小时中的具体分钟。(00 到 59)。 |
| SS | 指定一分钟中的具体秒数(00 到 59)。 |
CC 和 YY 数字是可选的。 如果两者都不给出,那么假定为当前年份。 如果指定 YY,但未指定 CC,那么 CC 数字如下定义:
- 如果 YY 数字的值在 70 和 99 之间,那么假定 CC 数字的值为 19。
- 如果 YY 数字的值在 00 和 37 之间,那么假定 CC 数字的值为 20。
- SS 的缺省值是 00。
对于在 2038 和 2105 之间的年份,请采用 yyyy 格式指定年份。
最终生成的时间受到 TZ 环境变量的值的影响。
Time 参数可指定为后跟可选后缀的数字。 at 命令将一位和二位数字解释为小时。 它将四位数字解释为小时和分钟。 LC_TIME 语言环境范畴中的 T_FMT 项指定小时和分钟的顺序。 缺省顺序是:小时后跟分钟。 还可以用 :(冒号)将小时和分钟隔开。 缺省顺序是小时:分钟。
另外,您可以指定下列其中一个后缀:
- 上午
- pm
- 祖鲁语
如果不指定 am 或 pm,at 命令使用 24 小时制时钟。 这些后缀可以跟在时间之后作为单独的参数或用空格隔开。 am 和 pm 后缀是来自 LC_TIME 语言环境范畴中 AM_STR 和 PM_STR 项的定义值。 后缀 zulu 指明时间是 GMT(格林威治标准时间)。
at 命令还识别以下作为 Time 参数特殊值的关键字:
- 正午
- midnight
- 现在
- A代表 AM
- P代表 PM
- N 表示中午 (noon)
- M 表示午夜 (midnight)
可以将可选的 Day 参数指定为月份名称或具体日期(且可能是以逗号开头的年份),或星期几。 LC_TIME 语言环境范畴中的 D_FMT 项指定了月和日的顺序(缺省情况下,日跟在月之后)。 LC_TIME 语言环境范畴中的 DAY_1 到 DAY_7 项指定了长日期名。 LC_TIME 语言环境范畴中的 ABDAY_1 到 ABDAY_7 项指定了短日期名。 LC_TIME 语言环境范畴中的 MON_1 到 MON_12 项指定了长月份名。 LC_TIME 语言环境范畴中的 ABMON_1 到 ABMON_12 项指定了短月份名。 缺省情况下,长名完全拼写出来;而对于工作日短名缩写为两个或更多字符,对于月份,短名则缩写为三个字符。
at 命令识别 today 和 tomorrow 作为 Day 参数的特殊缺省值。 如果指定的时间晚于当前时间,那么 today 值是 Day 的缺省值;如果指定时间早于当前时间,那么 tomorrow 值是缺省值。 如果指定月份早于当前月份(且没有给出年份),那么明年是缺省年份。
标志
| 项 | 描述 |
|---|---|
| -c | 要求使用 csh 命令来执行此作业。 |
| -f 文件 | 使用指定文件而非用标准输入作为输入。 |
| -f | 禁止删除验证。 请将此标志和 -r 标志一起使用。 |
| -i | 指定交互式删除。 请将此标志和 -r 标志一起使用。 |
| -k | 要求使用 ksh 命令来执行此作业。 |
| -l | 报告已调度的作业。 如果您具有 root 用户权限,那么您可以获取其他用户发出的作业。 |
| -M | 发送给用户有关成功执行命令的消息。 |
| -n[用户] | 报告您的队列或用户的队列中的文件数。 |
| -O | 按调度顺序列出作业。 此标志仅和 -l 标志一起使用才有效。 |
| -q 排队 | 指定在哪个队列中调度要提交作业。 当和 -l 标志一起使用时,报告限于 Queue 变量指定的队列。 缺省情况下,at 作业在 a 队列中调度。 b、c 和 d 队列分别为 batch 作业、cron 作业和
sync 作业而保留。
|
| -r 工作... | 删除之前由at或批处理命令安排的工作,其中工作是at或批处理命令指定的编号。 如果您不具有 root 用户权限(请参阅 su 命令),那么您只能除去自己的作业。 atrm 命令可用来让 root 用户除去其他用户发出的作业或某特定用户发出的所有作业。 |
| -s | 要求使用 bsh 命令(Bourne shell)来执行此作业。 |
| -t 日期 | 提交作业,以便在 日期 变量指定的时间运行。 |
| -u 用户 | 删除指定用户的所有作业。 如果和 -r 标志一起使用,那么不指定 Job 变量(正确的语法是 at -r -u User)。 |
| -v | 与 "-l标记一起使用,可显示所列工作的内容。 |
参数
| 项 | 描述 |
|---|---|
| 日 | 将可选的 Day 参数指定为月份名称或具体日期(且可能是以逗号开头的年份),或星期几。 |
| 增量 | 可选 Increment 参数可以是下列其中一项: |
- +(加号),后跟一个数字和下列其中一个单词:
- 分钟[s]
- 小时[s]
- 天[秒]
- 周[s]
- 月[s]
- 年[s]
- 特殊字 next 后跟下列其中一个单词:
- 分钟[s]
- 小时[s]
- 天[秒]
- 周[s]
- 月[s]
- 年[s]
安全性
审计事件
如果正确地配置和启用了审计子系统,那么 at 命令就会在每次运行时生成以下审计记录或事件:
| 事件 | 信息 |
|---|---|
| AT_JobAdd | 列出 at 正运行的作业、任务完成的时间和发出该命令的用户。 |
有关如何正确选择和分组审核事件以及如何配置审核事件数据收集的更多详情,请参阅在安全中设置审核。
RBAC 用户和 TrustedAIX®用户请注意:此命令可执行特权操作。 只有特权用户才能执行特权限定的操作。 有关权限与特权的更多信息,请参阅安全性中的“特权限定的命令数据库”。 有关与该命令相关联的特权和权限的列表,请参阅 lssecattr 命令或 getcmdattr 子命令。
退出状态
本命令返回以下退出值:
| 项 | 描述 |
|---|---|
| 重大安全事件数量 | at 命令成功提交、除去或列出一个或多个作业。 |
| >0 | 发生错误。 |
示例
- 要从终端调度命令,请输入类似下列其中之一的命令:
如果 uuclean 在您的当前目录中,请输入:
at 5 pm Friday uuclean <Ctrl-D> at now next week uuclean <Ctrl-D>如果 uuclean 在 $HOME/bin/uuclean 中,请输入:
at now + 2 days $HOME/bin/uuclean <Ctrl-D>注意:在命令行最后一项输入命令名时,如果命令不在当前目录下,则必须给出完整的路径名,并且at命令不接受任何参数。 - 要在 1 月 24 日的下午 3 点运行 uuclean 命令,请输入以下命令中的任何一个:
echo uuclean | at 3:00 pm January 24 echo uuclean | at 3 pm Jan 24 echo uuclean | at 1500 jan 24 - 要作业自己重新调度,那么通过将类似于以下内容的代码包含在 shell 文件中并且从 shell 过程中来调用 at 命令:
echo "ksh shellfile" | at now tomorrow - 要列出您已发送的稍后要运行的作业,请输入:at -l
- 要取消一个作业,请输入:at -r ctw.635677200.a这将取消工作ctw.635677200.a.使用at-l命令列出分配给作业的作业编号。
文件
| 项 | 描述 |
|---|---|
| /var/adm/cron/FIFO | 命名管道,使用 crontab 或 at 命令提交新作业时,它会将消息发送到 cron 守护程序。 |
| /usr/bin/at | 包含at命令。 |
| /var/adm/cron | 包含主 cron 目录。 |
| /var/adm/cron/at.allow | 指定许可用户的列表。 |
| /var/adm/cron/at.deny | 指定被拒绝用户的列表。 |
| 项 | 描述 |
|---|---|
| /var/spool/cron/atjobs | 包含 at 的假脱机区域目录。 |