cron / crontab日志在哪里?


752

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

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

Answers:


893

在默认安装中,cron作业将登录到

/var/log/syslog

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

 grep CRON /var/log/syslog

如果您没有重新配置任何内容,则条目将在其中。


46
如果未安装MTA,则cron只会丢弃作业输出。
巴里·凯利

11
Cron日志可能在/var/log/目录中的另一个文件中。检查cron.log或等效文件。
Navigatron 2014年

4
这不会给我这份工作的成果。它仅给出通用消息,说明cron已处理。
chovy

2
在AWS上是/ var / log / cron
tsukimi'2

5
@shadi,您还grep -i CRON可以搜索不区分大小写的内容
nafg

236

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

开启档案

/etc/rsyslog.d/50-default.conf

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

#cron.*

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

sudo service rsyslog restart

现在,您应该在此处看到cron日志文件:

/var/log/cron.log

现在,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)

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

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

01 14 * * * /home/joe/myscript >> /home/log/myscript.log 2>&1

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


1
我认为,这个答案将来会更好。因此,您的syslog文件更加清晰。
shgnInc

9
要从syslog中排除cron日志,可以将行更改*.*;auth,authpriv.none -/var/log/syslog*.*;auth,authpriv.none,cron.none -/var/log/syslog
科恩

在我们的CentOS 6上,cron。*在/etc/rsyslog.conf中定义,而我在rsyslog.d文件夹中为空。
斯科特·朱

代表什么2>&1
约翰·乔

2
@JohnJoe 2>&1用于将stderr转发到stdout,这样,您还将获得stderr到日志文件。
Sampo Sarrala

79

在这种情况下,有时进行连续监视可能会很有用:

tail -f /var/log/syslog | grep CRON

10
好吧,您可能想使用-F,它将在文件名更改后跟随文件,因此,当文件被截断/移动到(例如)时/var/log/syslog.1.gz,您仍在跟踪当前/var/log/syslog文件。根据男性文档,这与跑步相同tail xxxx -f --retry
Momer 2014年

37

您也可以将单个cronjobs的输出定向到它们自己的日志中,以提高可读性,您只需要将date的输出附加到某个地方即可。

 0 15 * * *    /home/andrew/daily-backup.sh >> /var/log/daily-backup.log 2>&1

4
true,但是如果此行由于语法错误而无法运行,则不会在指定的输出日志中写入任何内容。
Raptor

11
您可以通过在指定日志文件后附加2>&1来解决此问题。最好的做法是先测试您的cronjob,然后再将其添加到crontab中,然后在第一次计划运行时出现,以确保crontab的格式正确。
安德鲁·梅耶

10

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

例如,在我的Ubuntu 17.10上:

journalctl -u cron.service

9

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

首先使您的cron作业每分钟运行一次,然后使用测试日志记录将cron作为非守护程序运行(暂时,杀死可能已经启动的所有crond):

crond -nx test

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


7
无法在14.04No command 'crond' found, did you mean: Command 'cron' from package 'cron' (main)
G-

8

/var/log/syslog默认情况下处于启用状态。

但是可以将其设置为创建单独的cron.log,这更有用。

此问答描述了该过程:

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

同样在此答案中,还包含创建wcron命令的说明,该命令显示该命令几乎是实时的。另外,它链接到另一个答案,

如何更改cron日志级别?

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


5

Fedoar 29和RHEL 7

journalctl -t CROND

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.

3

您可以将cron的输出重定向到tmp文件

如:00 11 07 * * / bin / bash /home/ubuntu/command.sh> / tmp / output 2>&1

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


2

如前所述,cron作业已登录到 /var/log/syslog

您可以将syslog管道传输到grep并过滤掉CRON日志,如下所示

less /var/log/syslog | grep CRON 

您可以像这样搜索crontab日志

less /var/log/syslog | grep CRON | grep <search-keyword-comes-here>

您可以像这样搜索存储在gz文件中的crontab历史记录日志

less /var/log/syslog.2.gz | grep CRON | grep <search-keyword-comes-here>

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.