at 延时任务队列核查
at 用于一次性延时执行,任务在提交时被固化成一个脚本文件放在队列目录里,由 atd 在指定时刻取出执行。相比 cron 的周期性,at 只跑一次,容易被忽略:事件后的清理、延迟回连、定时删除日志都可能用它完成。队列文件本身保留了任务的完整内容与提交时间,即使任务已经执行完毕,文件也可能因未清理而留下记录,是很有价值的一手材料。
基本信息
| 查看命令 | atq 列出队列,at -c <任务号> 查看内容 |
|---|---|
| 队列目录 | /var/spool/cron/atjobs 或 /var/spool/at |
| 依赖服务 | atd(未运行则任务不执行) |
| 输出去向 | 任务输出以邮件形式发给提交者,受 MAILTO 影响 |
典型使用场景
- 排查一次性延时任务,识别被安排在未来执行的命令
- 查看已执行任务的原始内容,还原当时的下发命令
- 确认清理类动作的提交时间,对齐事件时间线
- 检查队列目录中残留的历史任务文件
- 评估 atd 是否启用,判断这类持久化是否可行
查看队列与内容
查看队列与内容
atq # 列出当前队列中的任务号与执行时间
at -c 3 2>/dev/null | tail -30 # 查看任务 3 的完整脚本内容
ls -lt --time-style=long-iso /var/spool/cron/atjobs/ 2>/dev/null | head
ls -lt --time-style=long-iso /var/spool/at/ 2>/dev/null | head
systemctl is-active atd 2>/dev/null # 确认调度服务是否在运行atq 输出读法
| 位置 | 含义 | 判读要点 |
|---|---|---|
| 第一列 | 任务号 | 用于 at -c 查看具体内容 |
| 第二列 | 计划执行时间 | 与事件时间线对齐的锚点 |
| 第三列 | 队列字母 | 默认 a 队列,字母可区分批量任务 |
| 第四列 | 提交用户 | 区分管理员维护与异常提交 |
atd 未运行时任务不会执行,但队列文件仍可能留在磁盘上,这反而更能反映投放意图;不同发行版的队列目录与权限不同,采集前先确认实际路径。
at -c 会把任务脚本原样回显,其中可能含重定向与命令替换,复制粘贴到终端有被误执行的风险,查看时只读不复制。
队列中的任务可用 atrm 按任务号删除,取证阶段不要执行删除操作,那会让队列证据消失;确需清理时先把整个队列目录复制留存,再在副本上操作。