debuggingcrontab作业

我已经在运行Java可执行文件的Linux服务器上添加了一个crontab项。 Java代码使用自己的类将错误和消息logging到日志文件中。

但是当我在预定的时间之后检查日志文件时,没有消息被logging。 应该至less有一条日志消息表示执行已经开始。

所以有两个可能的原因:

  1. 代码执行但没有logging;
  2. 或者,代码根本没有执行。

指定的日志文件具有chmod 777权限,所以我猜这是第二个原因。

为什么在预定的时间不执行crontab作业? 如何在没有发生任何logging的情况下进行debugging?

我读过,如果有一个错误cron发送电子邮件给用户。 如何找出哪个电子邮件地址与用户关联?

将2>&1附加到Crontab命令的末尾。 这会将stderr输出重定向到stdout。 然后确保你正在记录crontab的Unix命令。

 0 0,12 1 */2 * /sbin/ping -c 192.168.0.1; ls -la >>/var/log/cronrun 2>&1 

这将从Unix命令中捕获任何东西。

一些额外的提示(前一天帮助一个同事…)。 通过发出没有参数的命令集来写出环境变量。 然后让shell使用set -x命令来回显每个命令。 在脚本问题的顶部;

 set set -x 

您可以启用cron作业的日志记录以追踪问题。 您需要编辑/etc/rsyslog.conf or /etc/rsyslog.d/50-default.conf (在Ubuntu上)文件,并确保您没有注释以下行或添加它,如果它丢失:

 cron.* /var/log/cron.log 

然后重新启动rsyslogcron

 sudo service rsyslog restart sudo service cron restart 

Cron作业将记录到/var/log/cron.log

检查你是否真的格式化了运行良好的时间。

例如,而不是

 */1 * * * * echo 'debug' > /home/glab/change_branch.log 

可能是这样的:

 1 * * * * echo 'debug' > /home/glab/change_branch.log 

你可能会期待它每分钟运行一次。 也没有生成日志。

有一件事情可能导致你的问题是, cron (至少在我使用的分布式的亚马逊Linux操作系统)认为时间是UTC,因此如果你在不同的时区(例如-03:00),你可能会期待它提前3小时运行,实际上它将会实际上没有任何问题。

假设手动运行该命令,但不在Cron中,可能正确的路径不会暴露给cron命令。 您可以通过运行crontab -e来解决此问题,然后直接将路径输入到cron选项卡中:

# Export the path so that the scripts run correctly PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin:/root/bin