首页/系统/信创系统运维速查/at 一次性定时任务
服务与运维65 条

at 一次性定时任务

at 用于某时刻执行一次的场景:at/atq/atrm 一套命令,依赖 atd 服务;输出默认走邮件,可重定向落盘,适合临时维护窗口操作。

信创系统运维速查系统更新于 2026-10-13

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 并留变更记录

易错点

  • atd 服务未启用:任务提交后不会执行,先确认服务状态再提交
  • 依赖交互环境:at 执行时同样没有登录环境,涉及变量与相对路径的脚本要显式声明
  • 输出不重定向:默认走邮件通道,没有邮件服务时执行结果无处可查
  • 任务时间已过:at 会顺延到次日执行,容易在维护窗口之外触发变更
  • 一次性的变更任务不做回收:临时配置与账号要配套安排清理,避免长期残留
  • 提交后不确认队列:提交失败或时间理解有误都会导致任务没执行,用 atq 复核一遍

数据来源与参考

  • man 1 at
  • man 5 at.allow
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌