我正在努力调试一个无法正常工作的cron作业。 cron作业调用一个shell脚本,该脚本应该是一个rar文件 - 当我手动运行脚本时这可以正常工作,但由于某种原因,它不能通过cron工作。我正在使用绝对文件路径并验证路径是否正确。有没有人知道为什么会发生这种情况?
答案 0 :(得分:17)
好吧,你已经说过你已经使用了绝对路径,所以1号问题已经解决了。
接下来检查权限。哪个用户是cron作业?他是否拥有必要的所有权限?
然后,一个小技巧:如果你有一个shell脚本失败并且它没有在终端中运行我喜欢将它的输出重定向到一些文件。在脚本开头,添加:
exec &>/tmp/my.log
这会将STDOUT和STDERR重定向到/tmp/my.log
。那么也可以添加一行:
set -x
这将使bash打印命令它将执行,以及嵌套级别。
快乐的调试!
答案 1 :(得分:2)
检查cron作业失败的第一件事是查看您尝试执行的脚本是否可以使用完整环境。换句话说,您需要意识到通过cron执行的作业作为分离进程运行,这意味着它与登录环境无关。因此,每当您尝试调试在手动执行时有效的cron作业时,您需要确保cronjob可以使用相同的环境,这是您手动执行时可用的。这包括任何PATH设置以及脚本可能依赖的其他envvar。
答案 2 :(得分:0)
对我来说,问题是crontab中的一个不同的shell解释器。