Crontab

如何查看 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"