无法使用 crontab 在 Ubuntu 15.10 上运行 Sikulix 1.1.0

无法使用 crontab 在 Ubuntu 15.10 上运行 Sikulix 1.1.0

我尝试运行 Sikulix 脚本,但没有任何反应。


crontab:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/home/absolute
MAILTO=""

# m h dom mon dow user  command
00 3    * * *   root    sh /usr/crons/this_script_works
10 3    1-5 * * root    /home/absolute/runsikulix -r /home/absolute/auto/test.sikuli

如果我使用此命令运行它,脚本将运行良好:

sudo /home/absolute/runsikulix -r /home/absolute/auto/test.sikuli 

任何想法?

答案1

您需要捕获难以捉摸的 crontab 输出,这样您才能看到它在抱怨什么。

  1. 将 -x 添加到您的 shebang 中以便在脚本中获得详细输出: #!/bin/sh -x

  2. 设置 cron 作业,以便在排除故障时更频繁地执行: */1 * * * * root /home/absolute/runsikulix -r /home/absolute/auto/test.sikuli

Crontab 默认应该将日志记录到 /var/log/syslog。运行grep CRON /var/log/syslog并检查输出。如​​果您看到您的作业正在执行,那么您可以tail -f在 cron 运行时查看系统日志,看看它在抱怨什么。

  1. 如果输出不够详细,您可以按照以下说明重新配置 cron 以输出到日志文件。这是“正确”的做法:

配置 crontab 以记录到文件...

这应该会向您显示 crontab 正在执行的每个步骤,以便您了解其失败之处。我要指出的是,crontab 的环境非常简陋,您应该在脚本中使用完整路径而不是相对路径,因为您调用的任何二进制文件在运行时可能在您的路径中可用,也可能不可用。Crontab 就是这么有趣。要解决这个问题,您可以向脚本添加路径:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

...或者您可以使用其完整路径调用每个二进制文件:

/bin/echo "say something" && /bin/which java

您还可以以内联方式调用用户的环境:

0 5 * * * . /root/.profile; /home/absolute/runsikulix -r /home/absolute/auto/test.sikuli

下面是在 root 的 crontab 下运行的 Ruby 模板格式的示例脚本,它说明了处理环境问题的一些解决方法:

主指挥官.erb

相关内容