at 一次性任务是什么
at 用来安排延迟执行的一次性任务,只跑一次,比 cron 更隐蔽——任务执行后会从队列中消失,不留配置痕迹。排查时用 atq 列出待执行任务,用 at -c 查看完整脚本内容(含执行环境),队列文件位于 /var/spool/at 下。
基本信息
| 列表命令 | atq 或 at -l |
|---|---|
| 查看内容 | at -c <任务号> 输出完整脚本 |
| 队列位置 | /var/spool/at 或 /var/spool/cron/atjobs |
| 显著特点 | 任务执行后自动消失 |
| 权限控制 | /etc/at.allow 与 /etc/at.deny |
| 输出内容 | 完整脚本与环境变量 |
典型使用场景
- 排查延迟执行的持久化动作
- 事件处置时清点所有待执行任务
- 排查「几小时后出现异常动作」的现象
- 加固巡检:确认队列中没有陌生任务
- 与 cron、systemd timer 一起做完整清点
- 处置后确认队列已清空
- 演练中练习检查一次性任务
- 结合日志判断某个异常动作是否由 at 任务触发
列出并读取任务
列出并读取任务
atq # 列出待执行任务
at -c 3 | tail -n 40 # 查看任务完整内容与环境
at -l 2>/dev/null # 另一种列出方式
ls -la /var/spool/at/ /var/spool/cron/atjobs/ 2>/dev/null | head # 队列文件与时间
cat /etc/at.allow /etc/at.deny 2>/dev/null # 权限控制文件内容命令与文件读法
| 对象 | 作用 | 读法 |
|---|---|---|
| atq | 列出任务编号与执行时间 | 关注执行时间与提交者 |
| at -c | 输出完整脚本 | 包含环境变量与实际命令 |
| at.allow / at.deny | 控制谁能创建任务 | 两文件语义相反,容易搞混 |
| atrm | 删除任务 | 留档之后再删除 |
| 队列目录 | 任务落盘位置 | 直接看文件与 mtime |
at 任务执行后即被清除:发现可疑任务先 at -c 全量导出再删除,否则脚本内容就再也拿不回来。
at.allow 与 at.deny 语义相反(allow 存在时只有列出的用户能用),排查权限问题时不要把两者弄混。
atq 输出里的执行时间要和事件时间线对齐:攻击者常把时间设在凌晨或维护窗口,那正是监控最松的时段。
没有待执行任务不代表没有用过 at:已经执行完的任务会从队列消失,要去日志里找 atd 的执行记录来确认历史动作。