Ubuntu 20.04 中如何把 cron 任务的输出写入 syslog?
Ubuntu 上 cron 任务输出默认发邮件,配置 rsyslog 可以把 cron 输出统一进 syslog。方法:放开 rsyslog 的 cron 日志配置,或在 crontab 中用 logger 命令。
两种方式:一、在 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 查看),管理更现代。新系统可以考虑迁移。