at 用在什么场合
at 用于将来的某个时刻执行一次任务,与周期性的计划任务互补。提交后进入队列,可以用 atq 查看、atrm 删除。它依赖名为 atd 的服务,任务输出默认通过邮件发送,实际运维中更常见的做法是把输出重定向到日志文件,便于事后查看。
基本信息
| 服务名 | atd |
|---|---|
| 提交任务 | at 时间 或 echo 命令 | at 时间 |
| 查看队列 | atq |
| 删除任务 | atrm 任务号 |
| 权限控制 | /etc/at.allow 与 /etc/at.deny |
典型使用场景
- 维护窗口到点自动停服或启动服务
- 延迟两小时执行一次清理脚本
- 业务低峰时段触发一次性数据处理
- 临时排障时约定时间采集现场信息
- 变更后定时回收临时配置或账号
使用流程
使用流程
dnf install -y at # 安装工具包,DEB 系用 apt
systemctl enable --now atd # 启用并启动服务
echo '/opt/scripts/maintenance.sh >> /var/log/at-run.log 2>&1' | at 23:30
at now + 2 hours < /opt/scripts/check.sh # 两小时后执行脚本
atq # 查看待执行任务列表
at -c 3 | tail -20 # 查看任务 3 的完整内容
atrm 3 # 删除任务 3
tail -f /var/log/at-run.log # 跟踪执行结果时间写法示例
| 写法 | 含义 | 说明 |
|---|---|---|
| at 23:30 | 当天 23:30 执行 | 已过时刻则顺延到次日 |
| at now + 2 hours | 两小时后 | 适合延迟执行 |
| at 10:00 tomorrow | 明天 10:00 | 支持自然语言描述 |
| atq | 列出待执行任务 | 显示任务号与时间 |
| atrm 编号 | 删除指定任务 | 编号来自 atq 输出 |
使用建议
- 任务输出统一重定向到日志文件
- 重要任务执行后核对日志与结果
- 提交前确认目标脚本可独立运行
- 任务脚本内使用绝对路径
- 维护窗口任务同时通知相关方
权限由 /etc/at.allow 与 /etc/at.deny 控制:两者都存在时白名单优先,白名单存在但为空表示仅管理员可用,部署前先确认本机策略。
与其它调度方式的差异
- 一次性任务用 at 提交
- 周期性任务用计划任务或定时器
- 需要统一日志与依赖时用定时器
- 临时维护操作适合用 at 并留变更记录