调试crontab作业

时间:2011-02-03 06:13:25

标签: linux cron

我在Linux服务器上添加了一个crontab条目,该服务器将运行Java可执行文件。 Java代码使用自己的类将错误和消息记录到日志文件中。

但是当我在预定时间之后检查了日志文件时,没有记录任何消息。应该至少有一条日志消息说已经开始执行。

因此有两个可能的原因:

  1. 代码已执行但未记录;
  2. 或者,代码根本没有执行。
  3. 指定的日志文件具有chmod 777权限,因此我猜这是第二个原因。

    为什么crontab作业不能在预定时间执行?如何在没有任何日志记录的情况下调试它?

    我已经读过如果有错误,cron会向用户发送一封电子邮件。如何找出与用户关联的电子邮件地址?

6 个答案:

答案 0 :(得分:60)

您可以启用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 :(得分:33)

将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命令中捕获任何内容。

另外几个提示(前几天帮助同事后......)。通过发出不带参数的命令集来写出环境变量。并使用set -x命令获取shell以回显每个命令。在脚本问题的顶部;

set
set -x

答案 2 :(得分:5)

对于任何为此苦苦挣扎的人。 Cronjobs即使不执行stdoutput也会在/ var / mail / {username}中登录自己

答案 3 :(得分:2)

假设手动运行命令,但不在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

答案 4 :(得分:1)

可能导致您的问题的一件事是cron(至少在我正在使用的发行版中,亚马逊Linux操作系统)考虑时间为UTC,因此如果您在不同的时区(例如 - 03:00)你可能希望它能提前3小时运行,实际上你没有任何问题。

答案 5 :(得分:0)

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

例如,而不是

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

可能就是这样:

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

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