为什么我的命令行不能从cron运行?

Amb*_*pel 5 shell perl cron environment-variables

我有一个perl脚本(特别是XMLTV系列的" 抓取器" tv_grab_oztivo).

我可以像这样成功运行它:

/sw/bin/perl /path/to/tv_grab_oztivo --output /path/to/tv.xml
Run Code Online (Sandbox Code Playgroud)

我使用完整路径来消除工作目录中的问题.权限应该不是问题.

所以,如果我从终端(Mac OSX)运行它,它的工作正常.

但是当我将它设置为通过cron作业运行时,似乎根本没有发生任何事情.没有创建输出等.

据我所知,crontab没有任何问题,因为如果我用helloworld.pl替换实际的脚本,它会在正确的时间运行得很好.

那么,我该怎么做才能调试?从%ENV两种情况看,我可以看到环境非常不同,但我可以采取哪些其他方法进行调试?如何查看cron作业的输出,这可能是来自shell或其他任何东西的某种"死"消息或"未找到"消息?

或者我应该尝试以某种方式给命令的cron版本提供与我运行时相同的环境?

pax*_*blo 8

通常是因为在cron下运行时没有获得完整的环境.最好的办法是使用以下命令捕获输出:

( /sw/bin/perl /path/to/tv_grab_oztivo ... ) >/tmp/qq 2>&1
Run Code Online (Sandbox Code Playgroud)

然后看看/tmp/qq.

如果它确实是一个缺失的环境,那么你可能需要把:

. ~/.profile
Run Code Online (Sandbox Code Playgroud)

或者类似的东西,进入你的cron作业的执行链,例如:

( . ~/.profile ; /sw/bin/perl /path/to/tv_grab_oztivo ... ) >/tmp/qq 2>&1
Run Code Online (Sandbox Code Playgroud)