我在将运行Java可执行文件的Linux服务器上添加了一个crontab条目.Java代码使用自己的类将错误和消息记录到日志文件中.
但是当我在预定时间之后检查了日志文件时,没有记录任何消息.应该至少有一条日志消息说执行已经开始.
所以有两个可能的原因:
指定的日志文件具有chmod 777
权限,所以我猜这是第二个原因.
为什么crontab作业不会在预定时间执行?如何在没有任何日志记录的情况下调试它?
我已经读过,如果有错误,cron会向用户发送一封电子邮件.如何找出与用户关联的电子邮件地址?
Meh*_*des 74
您可以启用cron作业的日志记录以跟踪问题.您需要编辑/etc/rsyslog.conf or /etc/rsyslog.d/50-default.conf
(在Ubuntu上)文件并确保取消注释以下行,或者如果缺少则添加它:
cron.* /var/log/cron.log
Run Code Online (Sandbox Code Playgroud)
然后重启rsyslog
并cron
:
sudo service rsyslog restart
sudo service cron restart
Run Code Online (Sandbox Code Playgroud)
Cron的工作将登录到/var/log/cron.log
.
Kar*_*arl 37
将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
Run Code Online (Sandbox Code Playgroud)
这将从Unix命令中捕获任何内容.
几个额外的提示(前几天帮助同事之后......).通过发出不带参数的命令集来写出环境变量.并使用set -x命令获取shell以回显每个命令.在脚本问题的顶部;
set
set -x
Run Code Online (Sandbox Code Playgroud)
小智 6
假设手动运行命令有效,但在 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
对于其他为此而苦苦挣扎的人。即使不执行 stdoutput,Cronjobs 也会将自己登录到 /var/mail/{username}