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

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

#1 楼

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

/var/log/syslog


通过运行

 grep CRON /var/log/syslog

,您只能在该日志文件中看到cron作业。 >
如果您没有重新配置任何内容,则条目将在其中。

评论


如果未安装MTA,则cron只会丢弃作业输出。

–巴里·凯利(Barry Kelly)
13年11月18日在23:19

cron日志可能位于/ var / log /目录中的另一个文件中。检查cron.log或等效文件。

–Navigatron
2014年1月31日上午10:21

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

–碎肉
2015年12月12日,0:34

在AWS上是/ var / log / cron

–tsukimi
17年2月4日在1:23

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

– nafg
17年4月24日在2:08

#2 楼

您可以创建一个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中,您将看到有关cron在/etc/cron.hourly、cron.daily等中运行脚本的条目。像这样:

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


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

评论


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

– shgnInc
2013年12月22日8:36



要同时从系统日志中排除cron日志,您可以将*。*; auth,authpriv.none-/ var / log / syslog行更改为*。*; auth,authpriv.none,cron.none-/ var / log / syslog 。

–科恩。
14年2月13日在11:35

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

–朱伟
2014-09-17 3:35

2>&1代表什么?

–约翰·乔(John Joe)
17 Mar 21 '17在2:41

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

– Sampo Sarrala-codidact.org
17年7月25日在12:38



#3 楼

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

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


评论


好吧,您可能想使用-F,它将在文件名更改后跟随文件,以便在文件被截断/移动到例如/var/log/syslog.1.gz,您仍在遵循当前的/ var / log / syslog文件。根据man文档,这与运行tail xxxx -f --retry相同

–莫莫
2014年12月17日在22:24

#4 楼

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

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


评论


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

–猛禽
15年7月24日在2:37

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

–安德鲁·迈耶(Andrew Meyer)
2015年7月24日在16:04



如果daily-backup.log文件不存在,CRON会自动创建它。

–那霸布山S N
19/12/23在9:51



#5 楼

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

例如,在我的Ubuntu 17.10上:

journalctl -u cron.service


#6 楼

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

首先使您的cron作业每分钟运行一次,然后以非守护程序的身份运行cron(暂时,只要杀死可能已经存在的任何crond)测试日志记录:

crond -nx test

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

评论


无法在14.04上运行-未找到命令“ crond”,您的意思是:从软件包“ cron”发出的命令“ cron”(主)

– G-。
17年7月6日在9:40

今天在Ubuntu 18.04上出现相同的错误

– Nam G VU
4月25日12:30

#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.


#8 楼

默认情况下在/var/log/syslog中。

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

此常见问题解答描述了该过程:

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

在此答案中,还包含创建wcron命令以显示其接近实时的指令。另外,它还链接到另一个答案,

如何更改cron日志级别?

,其中显示了如何更改日志级别以包括更多的不仅仅是工作开始-级别15也将显示错误和结束时间。

#9 楼

如前所述,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。

#10 楼

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

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


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

#11 楼

检查包含压缩日志文件的syslog文件中的所有与CRON相关的日志,方法如下:


#12 楼

视系统类型和版本而定。但是在许多情况下,您必须确定目标crontab规则运行的时间基础。因此,例如,如果您正在搜索每日crontab规则的相关日志,那么您会在以下位置找到每天分为一个文件的日志:
$ ls -ltrh /var/log/cron-*

然后获取日志文件。