我已经在运行Java可执行文件的Linux服务器上添加了一个crontab项。 Java代码使用自己的类将错误和消息logging到日志文件中。
但是当我在预定的时间之后检查日志文件时,没有消息被logging。 应该至less有一条日志消息表示执行已经开始。
所以有两个可能的原因:
指定的日志文件具有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
然后重新启动rsyslog
和cron
:
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