最稳妥方式是脚本内用logger写syslog,如echo "backup started" | logger -t backup-script,日志进入/var/log/messages并可被集中收集。

Linux 中 Cron 本身不直接把任务输出写入 /var/log/messages 或 /var/log/syslog,但可以通过 logger 命令将脚本输出主动“推”进系统日志,配合 rsyslog 或 systemd-journald 统一管理。
用 logger 把脚本输出送进系统日志
这是最常用、最可控的方式。Cron 任务不改默认行为,而是让脚本或命令自己调用 logger,把 stdout/stderr 转成 syslog 消息。
- 基础用法:在 crontab 条目中用
logger包裹命令,例如:0 * * * * /path/to/script.sh 2>&1 | logger -t "myscript" -
-t "myscript"指定标识符(tag),方便后续用journalctl -t myscript或grep myscript /var/log/syslog过滤 - 若脚本本身已有输出,也可在脚本末尾加:
echo "Job finished at $(date)" | logger -t "myscript"
确保 syslog 后端能接收并落盘
logger 默认走 Unix socket(/dev/log),依赖本地 syslog 服务运行。需确认:
- rsyslog 或 systemd-journald 正在运行:
systemctl is-active rsyslog或systemctl is-active systemd-journald - rsyslog 配置中未禁用 local 标签消息(默认开启);如需单独存为文件,可在
/etc/rsyslog.d/50-myscript.conf加:if $programname == 'myscript' then /var/log/myscript-syslog.log - 使用 journalctl 查看更简单:
journalctl -t myscript -n 50 -f(实时跟踪最近 50 条)
替代方案:让 cron 自身日志更详细
系统级 cron 行为(如任务是否触发、权限错误等)记录在 /var/log/cron,但默认不包含脚本内容。可增强它:
- 编辑
/etc/rsyslog.conf或/etc/rsyslog.d/50-default.conf,确保有:cron.* /var/log/cron(已默认存在) - 启用 cron 的详细日志模式(部分发行版支持):
在/etc/sysconfig/crond(RHEL/CentOS)或/etc/default/cron(Debian/Ubuntu)中添加:CRON_OPTS="-L 15"(数值越大越详细,15 表示记录执行、完成、失败等) - 重启服务:
systemctl restart rsyslog cron
不推荐但偶见的“间接方式”
有些用户尝试用 2>&1 >> /dev/log,这行不通——/dev/log 不是普通文件,不能直接重定向写入。必须通过 logger 或 syslog API 才能正确投递。
想让 Cron 任务输出真正进入系统日志体系,核心就是用 logger 主动上报,并配好后端接收规则。不需要改 cron 本身,也不依赖邮件服务,干净又符合 Linux 日志规范。











