at 的常用选项
at 用于提交一次性定时任务,几个开关最实用:-f 从文件读取命令、-q 指定队列、-m 执行后发邮件、-t 用 [[CC]YY]MMDDhhmm 精确指定时间,-l 列出待执行任务、-d 删除任务。它与 cron 的分工很清楚:cron 管重复执行,at 管只跑一次的安排。
基本信息
| 用途 | 精确控制一次性任务的提交与执行时间 |
|---|---|
| 语法 | at [-f 文件] [-q 队列] [-m] -t 时间 |
| 时间写法 | 自然语言(now + 1 hour)与 -t 数字格式均可 |
| 配套命令 | atq 查看待执行队列、atrm 按编号删除 |
典型使用场景
- 维护窗口结束后定时恢复服务或切换配置
- 约定时间点执行一次部署或发版动作
- 延迟生成报告并在完成后发邮件提醒
- 用不同队列区分优先级,队列越靠后越让路
- 下班前提交任务,避免忘记后续操作
- 演练与测试中模拟未来某个时刻的动作
示例
示例
at -f /opt/scripts/maintenance.sh 03:00 # 从脚本文件读取命令
at -m -f /opt/scripts/report.sh now + 1 hour # 执行后邮件通知
at -t 202610201430 -f /opt/scripts/deploy.sh # 指定 2026-10-20 14:30
at -q b -f /opt/scripts/bigjob.sh 23:00 # 放入 b 队列
echo '/opt/app/rotate.sh' | at 02:00 # 管道方式提交单条命令
atq # 列出待执行任务
atrm 12 # 按编号删除任务常用选项
| 选项 | 作用 | 说明 |
|---|---|---|
| -f 文件 | 从文件读取命令 | 避免交互输入,便于脚本化 |
| -q 队列 | 指定队列字母 | a-z 供 at 使用,A-Z 供 batch 使用 |
| -m | 执行后发邮件 | 即使没有输出也通知 |
| -t 时间 | 精确时间格式 | MMDDhhmm,跨年要写全 CCYY |
| -l / -d | 列出 / 删除任务 | 与 atq、atrm 等价 |
队列字母 a-z 由 at 使用,A-Z 由 batch 使用;字母越靠后 nice 值越高,也就是在系统繁忙时越容易让路。
-t 的格式是 MMDDhhmm,而不是本地化日期串;年份可以省略,但跨年场景必须写全,否则任务会被排到错误的年份。
at 依赖 atd 服务:服务未运行时提交会失败或任务不执行,排查「任务没跑」时先确认 atd 状态,再看队列里是否还有该任务。
提交后立刻用 atq 确认队列里能看到该任务,是最省事的自查动作:语法错误常在交互层被忽略,而任务其实根本没有入队。
at 任务只在系统运行期间触发,机器关机时错过的任务不会补跑;需要开机后补做的工作属于 anacron 的职责范围。