Ubuntu 20.04 中如何把 cron 任务的输出写入 syslog?

Ubuntu 上 cron 任务输出默认发邮件,配置 rsyslog 可以把 cron 输出统一进 syslog。方法:放开 rsyslog 的 cron 日志配置,或在 crontab 中用 logger 命令。

最佳实践
Ubuntu 20.04 中如何把 cron 任务的输出写入 syslog?封面

两种方式:一、在 crontab 里把输出管道给 logger 命令(最灵活,可自定义标签);二、确保 rsyslog 开启了 cron 日志配置,让 cron 守护进程的记录写入 /var/log/syslog

方式一:logger 命令(推荐,控制力强)

* * * * * /home/user/myjob.sh 2>&1 | logger -t myjob
  • 2>&1 把标准错误合并到标准输出;
  • logger -t myjob 把内容写入 syslog,标签为 myjob
  • 之后 grep myjob /var/log/syslog 就能看到这个任务的全部输出。

方式二:rsyslog 记录 cron 日志

Ubuntu 的 rsyslog 默认配置中 cron 日志是被注释掉的,编辑 /etc/rsyslog.d/50-default.conf

# 找到这行,去掉注释
cron.*    /var/log/cron.log

重启 rsyslog:

sudo systemctl restart rsyslog

之后 cron 的执行记录(什么时候跑了哪个任务)会写入 /var/log/cron.log。注意:这只记录 cron 守护进程的事件,脚本自身的输出仍需方式一或输出重定向。

查看

grep CRON /var/log/syslog      # cron 守护进程记录
tail -f /var/log/cron.log      # 独立 cron 日志(方式二)

观测云对照

写入 syslog 后,观测云 DataKit 的 syslog 接收或文件采集可以把这些日志统一收集到平台,配合监控器在任务报错(ERROR 关键字)或日志中断(任务没跑)时告警。

常见问题(FAQ)

Q:cron 默认把输出发到哪?
A:发到本地邮件(需要 MTA)。系统没配邮件服务时输出直接丢弃——所以配日志很重要。

Q:logger 命令写的日志在哪个文件?
A:默认进 /var/log/syslog(Ubuntu/Debian)。想让特定标签进独立文件,在 /etc/rsyslog.d/ 加路由规则。

Q:systemd 定时器(timer)能替代 cron 吗?
A:能,且日志自动进 journald(journalctl -u myjob.timer 查看),管理更现代。新系统可以考虑迁移。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台