<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Crontab on HiDa</title>
    <link>https://www.0niu.cn/tags/crontab/</link>
    <description>Recent content in Crontab on HiDa</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh</language>
    <lastBuildDate>Tue, 21 Feb 2023 21:00:19 +0800</lastBuildDate><atom:link href="https://www.0niu.cn/tags/crontab/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>如何查看 Red Hat 和 Debian 服务器的 crontab 日志</title>
      <link>https://www.0niu.cn/posts/view-crontab-logs-redhat-debian/</link>
      <pubDate>Tue, 21 Feb 2023 21:00:19 +0800</pubDate>
      
      <guid>https://www.0niu.cn/posts/view-crontab-logs-redhat-debian/</guid>
      <description>&lt;p&gt;定时任务跑没跑、有没有报错，第一件事就是翻日志。但 Red Hat 和 Debian 两家的 cron 日志不在同一个位置，刚接触服务器的人很容易找不到。这篇文章把两边的查看方法、日志格式、和日志为空时的排查步骤都列出来。&lt;/p&gt;
&lt;h2 id=&#34;red-hat-系列rhel--centos--fedora&#34;&gt;Red Hat 系列（RHEL / CentOS / Fedora）&lt;/h2&gt;
&lt;p&gt;Red Hat 系的 cron 守护进程叫 &lt;code&gt;crond&lt;/code&gt;（来自 cronie 包），日志默认写在 &lt;code&gt;/var/log/cron&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;直接看：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tail -f /var/log/cron
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;每条记录长这样：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Mar 21 10:00:01 hostname CRON[12345]: (alice) CMD (/home/alice/backup.sh)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;CRON[12345]&lt;/code&gt; 是 cron 分配的进程 PID，&lt;code&gt;(alice)&lt;/code&gt; 是执行任务的用户，&lt;code&gt;CMD (...)&lt;/code&gt; 后面就是 crontab 里写的命令。命令执行成功、失败，都会原样记在这里，输出也会一并追加。&lt;/p&gt;
&lt;p&gt;如果 &lt;code&gt;/var/log/cron&lt;/code&gt; 看不到内容，去系统日志里找：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;grep CRON /var/log/messages
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Red Hat 系的 &lt;code&gt;rsyslog&lt;/code&gt; 会把 cron 消息同时写到 &lt;code&gt;/var/log/messages&lt;/code&gt;，两个文件内容基本一致。&lt;/p&gt;
&lt;p&gt;systemd 发行版（RHEL 7+、CentOS 7+、Fedora）还可以用 journalctl：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;journalctl -u crond --since &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1 hour ago&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;debian-系列debian--ubuntu&#34;&gt;Debian 系列（Debian / Ubuntu）&lt;/h2&gt;
&lt;p&gt;Debian 系的 cron 守护进程叫 &lt;code&gt;cron&lt;/code&gt;，日志默认写在 &lt;code&gt;/var/log/syslog&lt;/code&gt;，不单独存一个 cron 文件。&lt;/p&gt;
&lt;p&gt;看 cron 相关的记录：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;grep CRON /var/log/syslog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;条目格式和 Red Hat 一样，只是容器换成了 syslog：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Mar 21 10:00:01 hostname CRON[12345]: (alice) CMD (/home/alice/backup.sh)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;有些 Debian/Ubuntu 系统会把 cron 单独写到 &lt;code&gt;/var/log/cron&lt;/code&gt;，取决于 &lt;code&gt;/etc/rsyslog.d/50-default.conf&lt;/code&gt; 里 &lt;code&gt;#cron.* /var/log/cron&lt;/code&gt; 这行有没有被注释掉。如果注释掉了，cron 消息就只走 syslog；取消注释并重启 rsyslog，就会多出一个独立的 cron 日志文件。&lt;/p&gt;
&lt;p&gt;journalctl 同样可用：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;journalctl -u cron --since &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1 hour ago&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <content>&lt;p&gt;定时任务跑没跑、有没有报错，第一件事就是翻日志。但 Red Hat 和 Debian 两家的 cron 日志不在同一个位置，刚接触服务器的人很容易找不到。这篇文章把两边的查看方法、日志格式、和日志为空时的排查步骤都列出来。&lt;/p&gt;
&lt;h2 id=&#34;red-hat-系列rhel--centos--fedora&#34;&gt;Red Hat 系列（RHEL / CentOS / Fedora）&lt;/h2&gt;
&lt;p&gt;Red Hat 系的 cron 守护进程叫 &lt;code&gt;crond&lt;/code&gt;（来自 cronie 包），日志默认写在 &lt;code&gt;/var/log/cron&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;直接看：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tail -f /var/log/cron
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;每条记录长这样：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Mar 21 10:00:01 hostname CRON[12345]: (alice) CMD (/home/alice/backup.sh)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;CRON[12345]&lt;/code&gt; 是 cron 分配的进程 PID，&lt;code&gt;(alice)&lt;/code&gt; 是执行任务的用户，&lt;code&gt;CMD (...)&lt;/code&gt; 后面就是 crontab 里写的命令。命令执行成功、失败，都会原样记在这里，输出也会一并追加。&lt;/p&gt;
&lt;p&gt;如果 &lt;code&gt;/var/log/cron&lt;/code&gt; 看不到内容，去系统日志里找：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;grep CRON /var/log/messages
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Red Hat 系的 &lt;code&gt;rsyslog&lt;/code&gt; 会把 cron 消息同时写到 &lt;code&gt;/var/log/messages&lt;/code&gt;，两个文件内容基本一致。&lt;/p&gt;
&lt;p&gt;systemd 发行版（RHEL 7+、CentOS 7+、Fedora）还可以用 journalctl：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;journalctl -u crond --since &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1 hour ago&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;debian-系列debian--ubuntu&#34;&gt;Debian 系列（Debian / Ubuntu）&lt;/h2&gt;
&lt;p&gt;Debian 系的 cron 守护进程叫 &lt;code&gt;cron&lt;/code&gt;，日志默认写在 &lt;code&gt;/var/log/syslog&lt;/code&gt;，不单独存一个 cron 文件。&lt;/p&gt;
&lt;p&gt;看 cron 相关的记录：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;grep CRON /var/log/syslog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;条目格式和 Red Hat 一样，只是容器换成了 syslog：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Mar 21 10:00:01 hostname CRON[12345]: (alice) CMD (/home/alice/backup.sh)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;有些 Debian/Ubuntu 系统会把 cron 单独写到 &lt;code&gt;/var/log/cron&lt;/code&gt;，取决于 &lt;code&gt;/etc/rsyslog.d/50-default.conf&lt;/code&gt; 里 &lt;code&gt;#cron.* /var/log/cron&lt;/code&gt; 这行有没有被注释掉。如果注释掉了，cron 消息就只走 syslog；取消注释并重启 rsyslog，就会多出一个独立的 cron 日志文件。&lt;/p&gt;
&lt;p&gt;journalctl 同样可用：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;journalctl -u cron --since &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1 hour ago&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;日志条目怎么读&#34;&gt;日志条目怎么读&lt;/h2&gt;
&lt;p&gt;一条 cron 日志包含四个部分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;时间&lt;/strong&gt;：&lt;code&gt;Mar 21 10:00:01&lt;/code&gt;，任务触发时的系统时间&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;主机名&lt;/strong&gt;：&lt;code&gt;hostname&lt;/code&gt;，方便在多台机器的日志里区分来源&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PID&lt;/strong&gt;：&lt;code&gt;CRON[12345]&lt;/code&gt;，本次任务 fork 出的进程号，追查问题时有用&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;用户和命令&lt;/strong&gt;：&lt;code&gt;(alice) CMD (/home/alice/backup.sh)&lt;/code&gt;，crontab 里那一行的实际内容&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果命令执行失败，日志里会有对应输出。常见报错：命令不在 PATH 里（crontab 环境变量极简，建议用绝对路径）、脚本没有执行权限、输出被邮件系统拦截。&lt;/p&gt;
&lt;h2 id=&#34;日志为空怎么办&#34;&gt;日志为空怎么办&lt;/h2&gt;
&lt;p&gt;先确认 cron 守护进程在跑：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl status cron    &lt;span style=&#34;color:#75715e&#34;&gt;# Debian&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl status crond   &lt;span style=&#34;color:#75715e&#34;&gt;# Red Hat&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;没跑就启动它：&lt;code&gt;systemctl start crond&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;再看 rsyslog 是否正常：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl status rsyslog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;rsyslog 挂了，所有日志都会停。最后确认一下 cron 有没有被 SELinux 或 AppArmor 拦住——Red Hat 系默认开 SELinux，Debian 系某些发行版开 AppArmor，两者都可能阻止 cron 写日志或执行脚本。&lt;/p&gt;
&lt;h2 id=&#34;一个省事的技巧&#34;&gt;一个省事的技巧&lt;/h2&gt;
&lt;p&gt;不确定日志在哪时，直接用 journalctl 不用区分发行版：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;journalctl _COMM&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;cron --since &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;today&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;_COMM=cron&lt;/code&gt; 匹配 cron 守护进程本身，不管发行版叫 &lt;code&gt;crond&lt;/code&gt; 还是 &lt;code&gt;cron&lt;/code&gt;，都能查到 cron 相关的全部记录。缺点是不支持 RHEL 6 那种不用 systemd 的老系统。&lt;/p&gt;
&lt;p&gt;日常排查 cron 问题，记住两行就够：Red Hat 看 &lt;code&gt;/var/log/cron&lt;/code&gt;，Debian 看 &lt;code&gt;/var/log/syslog&lt;/code&gt; 里 grep CRON。&lt;/p&gt;</content>
    </item>
    
  </channel>
</rss>
