命令是干什么的
atq 列出排队中的 at 与 batch 任务,atrm 按任务编号删除任务。两者分别是 at -l 与 at -d 的等价简写,操作对象是 atd 守护进程维护的队列:任务提交后只是排队,真正开始执行、以及执行结果的通知都由 atd 负责。所以在排查任务没跑起来时,atq 只能证明任务还躺在队列里,执行阶段的问题要去 atd 状态和任务自身输出里找。
基本信息
| 适用平台 | Linux。at/atq/atrm 由 at 软件包提供,Debian 系装 at,RHEL 系装 at,最小化安装默认不带 |
|---|---|
| 等价关系 | atq 等于 at -l;atrm 编号 等于 at -d 编号 |
| 查看任务内容 | at -c 编号 打印任务脚本与提交时刻的环境 |
| 队列字母 | a 队列来自 at 提交,b 队列来自 batch 提交 |
| 权限 | 普通用户只能看和删自己的任务,root 可操作全部用户 |
典型使用场景
- 提交延时任务后确认是否真的进了队列,atq 是最直接的证据
- 误提交了危险脚本(例如带清理删除逻辑),要在执行窗口前撤销
- 任务没有按时执行,先用 at -c 把脚本和它继承的环境变量打出来核对
- 分层排查:任务在队列里却不动,方向转向 atd 运行状态与系统负载
- 变更窗口前清理历史遗留任务,避免与本次变更撞车
- 交接班时清点待执行任务,把谁会改什么、什么时候改列清楚
常用示例
常用示例
atq # 列出当前用户排队中的任务
atq -v # 详细格式,队列字母单独成列
atq -q a # 只看 a 队列,即 at 提交的任务
atq -q b # 只看 b 队列,即 batch 提交的任务
at -c 3 | tail -n 20 # 打印 3 号任务的脚本与环境,含工作目录和 PATH
grep -n 'rm ' <(at -c 3) # 删除前核对内容,确认没有危险命令
atrm 3 # 删除 3 号任务
atrm 3 5 7 # 一次删多个编号
atq # 复核,编号不再出现才算删掉atq 输出逐列读法
| 列位置 | 示例片段 | 含义与注意 |
|---|---|---|
| 第 1 列 | 3 | 任务编号,atrm 用的就是它;编号会被系统复用 |
| 第 2 到 3 列 | Wed Oct 15 | 计划执行的星期与日期 |
| 第 4 列 | 03:00:00 | 计划执行时刻,按本机系统时区显示 |
| 第 5 列 | 2026 | 计划执行的年份 |
| 第 6 列 | a | 队列字母:a 为 at 提交,b 为 batch 提交 |
| 第 7 列 | root | 提交该任务的用户名 |
atq 默认只显示当前用户的任务,root 能看到全部;切换了登录账号再查,很容易得出任务不存在的错误结论。
at -c 输出的是 atd 保存下来的完整脚本:开头一段是提交时的环境变量、umask 与工作目录,命令本体在后面。手工执行正常、交给任务就失败的情况,先对比这段环境。
任务的标准输出与错误输出默认由 atd 以邮件形式发给提交者;机器上没有邮件服务时这些输出全部丢失,脚本里应自行重定向到日志文件。