首页/系统/Linux 运维命令速查/at 任务输出与日志去哪了
定时任务与计划50 条

at 任务输出与日志去哪了

at 任务的标准输出/错误默认邮件给任务属主(-m 即使无输出也发);系统日志里 atd 记录任务启动;排查时三项一起看。

Linux 运维命令速查系统更新于 2026-10-13

at 任务的输出去哪了

at 任务的标准输出与错误默认通过邮件发给任务属主,加 -m 时即使没有输出也会发;系统层面由 atd 记录任务的启动与执行痕迹。所以排查「任务为什么没有结果」要三处一起看:邮件、atd 日志、以及任务自身的重定向。

基本信息

输出去向邮件(默认)、atd 日志、任务内的重定向
日志位置系统日志或 journalctl -u atd(视发行版)
稳妥做法任务内显式重定向到日志文件
前置条件邮件通知依赖本机有可用的 MTA

典型使用场景

  • 确认某个一次性任务是否真的执行过
  • 任务没有输出,怀疑执行失败
  • 把输出统一落到固定日志文件便于归档
  • 排查邮件未送达造成的信息丢失
  • 为一次性任务留下可审计的执行痕迹
  • 把任务执行时间与实际业务变化对齐

查执行痕迹

查执行痕迹
sudo grep atd /var/log/syslog | tail -n 10       # Debian 系系统日志
sudo journalctl -u atd --since today --no-pager | tail -n 20
mail -u $USER 2>/dev/null | head                 # 本机 MTA 存在时查看邮件
journalctl -u atd -n 50 | grep -i 'cmd'          # 找执行记录
# 更稳妥的做法:任务内自带重定向
exec >>/var/log/maint.log 2>&1
date -Is && /opt/scripts/maintenance.sh

三种去向

去向内容排查方式
邮件标准输出与错误查看本机邮箱或 MTA 日志
atd 日志任务调度与启动记录journalctl -u atd 或系统日志
任务重定向脚本自身写出的日志直接查看目标日志文件
退出状态通过邮件或脚本内记录脚本内显式记录退出码
无 MTA 场景输出可能静默丢失必须改为任务内重定向
与 cron 一样,默认的邮件通知依赖本机有可用 MTA;生产环境应统一改成任务内重定向到日志文件,不要把结果押在邮件链路上。
没有 MTA 时 at 任务的输出可能静默丢失,任务看起来执行成功却没有任何结果可查,排查时容易误判成任务根本没有运行。
at 任务在机器关机期间不会补跑:错过的时间点不会自动补上,需要重新提交,这一点与 anacron 的补跑机制正好相反。

易错点

  • 依赖邮件收集输出却没有可用 MTA:结果静默丢失,误判任务没有执行
  • 不加重定向:日志与业务输出混在邮件里,长期无人可查
  • 把 at 当成 anacron 用:关机期间错过的任务不会补跑
  • 只看任务是否提交,不看执行记录:提交成功与执行成功是两件事

数据来源与参考

  • man 1 at(输出邮件行为)
  • man 8 atd

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌