cron / crontab 日志在哪里?

Sco*_*ter 975 cron log

我想验证我的 cron 作业是否正在执行以及何时执行。我相信我的sudo crontab -e工作有日志,但在哪里?

我搜索了谷歌并找到了要查看的建议/var/log(在其中我没有看到名称中带有“cron”的任何内容)并编辑/etc/syslog.conf我也没有的文件。

Ric*_*way 1156

在默认安装中,cron 作业被记录到

/var/log/syslog
Run Code Online (Sandbox Code Playgroud)

您可以通过运行在该日志文件中仅查看 cron 作业

 grep CRON /var/log/syslog
Run Code Online (Sandbox Code Playgroud)

如果您没有重新配置任何东西,条目将在那里。

  • 如果没有安装 MTA,cron 只会丢弃作业输出。 (70认同)
  • cron 日志可能位于 `/var/log/` 目录中的另一个文件中。检查 cron.log 或等效文件。 (15认同)
  • 这不会给我工作的输出。它只是给出了一个通用消息,表明 cron 已被处理。 (11认同)
  • @shadi 你也可以`grep -i CRON` 来搜索不区分大小写的 (8认同)
  • 在 AWS 上它是 /var/log/cron (5认同)
  • 我没有安装 MTA,但输出保存到 `/var/log/syslog`。它每天轮换。 (2认同)

use*_*345 312

您可以创建一个 cron.log 文件以仅包含显示在 syslog 中的 CRON 条目。请注意,如果您按照以下说明操作,CRON 作业仍将显示在系统日志中。

打开文件

/etc/rsyslog.d/50-default.conf
Run Code Online (Sandbox Code Playgroud)

找到以以下内容开头的行:

#cron.*
Run Code Online (Sandbox Code Playgroud)

取消注释该行,保存文件,然后重新启动 rsyslog:

sudo service rsyslog restart
Run Code Online (Sandbox Code Playgroud)

您现在应该在这里看到一个 cron 日志文件:

/var/log/cron.log
Run Code Online (Sandbox Code Playgroud)

Cron 活动现在将记录到此文件(除了 syslog)。

请注意,在 cron.log 中,您将在 /etc/cron.hourly、cron.daily 等中看到 cron 何时运行脚本的条目 - 例如:

Apr 12 14:17:01 cd CRON[14368]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Run Code Online (Sandbox Code Playgroud)

但是,您不会看到更多有关在 /etc/cron.daily 或 /etc/cron.hourly 中实际运行哪些脚本的信息,除非这些脚本将输出直接输出到 cron.log(或可能输出到其他一些日志文件)。

如果您想验证 crontab 是否正在运行而不必在 cron.log 或 syslog 中搜索它,请创建一个将输出重定向到您选择的日志文件的 crontab - 类似于:

01 14 * * * /home/joe/myscript >> /home/log/myscript.log 2>&1
Run Code Online (Sandbox Code Playgroud)

这会将运行的脚本可能产生的所有标准输出和错误重定向到指定的日志文件。

  • 要从 syslog 中排除 cron 日志,您可以将行 `*.*;auth,authpriv.none -/var/log/syslog` 更改为 `*.*;auth,authpriv.none,cron.none -/var/日志/系统日志`。 (9认同)
  • @JohnJoe 2>&1 用于将 stderr 转发到 stdout,这样您也可以将 stderr 记录到日志文件中。 (3认同)
  • 在我看来,这个答案将来会更好。所以你的系统日志文件更清晰。 (2认同)

小智 112

在这种情况下,有时持续监控它会很有用:

tail -f /var/log/syslog | grep CRON
Run Code Online (Sandbox Code Playgroud)

  • 好吧,你可能想使用 `-F`,它会跟随文件的名称更改,这样当它被截断/移动到,例如 `/var/log/syslog.1.gz` 时,你仍然在关注当前的`/var/log/syslog` 文件。根据 man 文档,这与运行 `tail xxxx -f --retry` 相同 (22认同)

And*_*yer 62

您还可以将各个 cronjobs 的输出定向到他们自己的日志以获得更好的可读性,您只需要在某处附加日期的输出。

 0 15 * * *    /home/andrew/daily-backup.sh >> /var/log/daily-backup.log 2>&1
Run Code Online (Sandbox Code Playgroud)

  • 您可以通过在指定日志文件后附加 2>&1 来解决此问题。在将 cronjob 添加到 crontab 之前测试它们也是最佳实践,然后在第一次计划运行时出现以确保 crontab 的格式正确。 (17认同)
  • true,但如果此行由于语法错误而无法运行,则不会在指定的输出日志中写入任何内容。 (5认同)
  • 如果`daily-backup.log` 文件不存在,CRON 会自动创建它。 (3认同)

小智 37

如果您systemd的系统上已安装,则可以使用该journalctl命令显示 cron 作业日志。

例如,在我的 Ubuntu 17.10 上:

journalctl -u cron.service
Run Code Online (Sandbox Code Playgroud)


Har*_*rel 20

journalctl -t CROND
Run Code Online (Sandbox Code Playgroud)

journalctl手册:

   -t, --identifier=SYSLOG_IDENTIFIER|PATTERN
       Show messages for the specified syslog identifier SYSLOG_IDENTIFIER, 
       or for any of the messages with a "SYSLOG_IDENTIFIER" matched by PATTERN.

       This parameter can be specified multiple times.
Run Code Online (Sandbox Code Playgroud)

  • 在 ubuntu 20 上,您可以使用标签 CRON,标签 CROND 不会给出任何结果。 (2认同)

小智 15

这是一个非常古老的问题,但这些答案似乎都不令人满意。

首先让您的 cron 作业每分钟运行一次,然后使用测试日志将 cron 作为非守护进程运行(暂时,只需杀死任何可能已经启动的 crond):

crond -nx test

并查看流经终端的程序执行日志。

  • 不能在 14.04 上运行 - 找不到命令 'crond',您的意思是:来自包 'cron'(main)的命令 'cron' (10认同)

SDs*_*lar 12

它是/var/log/syslog默认的。

但是可以设置创建一个单独的cron.log,比较有用。

此问答描述了该过程:

16.04:如何让cron创建cron.log并实时监控?

在这个答案中还有创建一个wcron命令的说明,该命令显示它是近乎实时的。另外,它链接到另一个答案,

如何更改 cron 日志级别?

这显示了如何更改日志级别以不仅包括作业的开始 - 级别 15 还将显示错误和结束时间。


zer*_*ero 10

如前所述,cron 作业被记录到 /var/log/syslog

您可以通过管道将系统日志传递给 grep 并过滤掉 CRON 日志,如下所示

less /var/log/syslog | grep CRON 
Run Code Online (Sandbox Code Playgroud)

您可以像这样搜索 crontab 日志

less /var/log/syslog | grep CRON | grep <search-keyword-comes-here>
Run Code Online (Sandbox Code Playgroud)

您可以搜索存储在 gz 文件中的 crontab 历史日志,如下所示

less /var/log/syslog.2.gz | grep CRON | grep <search-keyword-comes-here>
Run Code Online (Sandbox Code Playgroud)

拥有日志记录机制总是被认为是好的,您可以为您的服务器快速设置ELK,您还可以尝试使用logz


小智 9

您可以将 的输出重定向cron到临时文件。如:

00 11 07 * * /bin/bash /home/ubuntu/command.sh > /tmp/output 2>&1
Run Code Online (Sandbox Code Playgroud)

错误和正常输出,都将重定向到同一个文件


小智 7

这显示了我使用 Centos 7 的 CRON 运行时

cat /var/log/cron
Run Code Online (Sandbox Code Playgroud)

  • CentOS! = Ubuntu ... (7认同)

Zhi*_*Lee 5

在 Ubuntu 20.04 上,/var/mail/{user}有我正在寻找的 cron 消息。

我找不到合适的 cron 日志/var/log/messages

  • 这不是一个问题,我发布了一个答案,因为我在 /var/mail/{user} 中发现了 cron 日志,而不是 /var/log/messages 或 /var/log/cron 或 /var/log/syslog 中描述的其他答案。 (3认同)