如何查看 Red Hat 和 Debian 服务器的 crontab 日志
定时任务跑没跑、有没有报错,第一件事就是翻日志。但 Red Hat 和 Debian 两家的 cron 日志不在同一个位置,刚接触服务器的人很容易找不到。这篇文章把两边的查看方法、日志格式、和日志为空时的排查步骤都列出来。
Red Hat 系列(RHEL / CentOS / Fedora)
Red Hat 系的 cron 守护进程叫 crond(来自 cronie 包),日志默认写在 /var/log/cron。
直接看:
tail -f /var/log/cron
每条记录长这样:
Mar 21 10:00:01 hostname CRON[12345]: (alice) CMD (/home/alice/backup.sh)
CRON[12345] 是 cron 分配的进程 PID,(alice) 是执行任务的用户,CMD (...) 后面就是 crontab 里写的命令。命令执行成功、失败,都会原样记在这里,输出也会一并追加。
如果 /var/log/cron 看不到内容,去系统日志里找:
grep CRON /var/log/messages
Red Hat 系的 rsyslog 会把 cron 消息同时写到 /var/log/messages,两个文件内容基本一致。
systemd 发行版(RHEL 7+、CentOS 7+、Fedora)还可以用 journalctl:
journalctl -u crond --since "1 hour ago"
Debian 系列(Debian / Ubuntu)
Debian 系的 cron 守护进程叫 cron,日志默认写在 /var/log/syslog,不单独存一个 cron 文件。
看 cron 相关的记录:
grep CRON /var/log/syslog
条目格式和 Red Hat 一样,只是容器换成了 syslog:
Mar 21 10:00:01 hostname CRON[12345]: (alice) CMD (/home/alice/backup.sh)
有些 Debian/Ubuntu 系统会把 cron 单独写到 /var/log/cron,取决于 /etc/rsyslog.d/50-default.conf 里 #cron.* /var/log/cron 这行有没有被注释掉。如果注释掉了,cron 消息就只走 syslog;取消注释并重启 rsyslog,就会多出一个独立的 cron 日志文件。
journalctl 同样可用:
journalctl -u cron --since "1 hour ago"