脚本手动工作,但不在cron工作

我使用Perl脚本在rrd中创build了我的系统图。 当我手动运行脚本时,它会更新graphics。 另一方面cron在日志中显示该作业已经执行,但它不更新图表。任何帮助吗?

我已经设置了apache2目录权限root:apache with 770

发行:CentOs 5.5。

Cronconfiguration:

0,5,10,15,20,25,30,35,40,45,50,55 * * * * /home/user/graphs/script-rrd.pl > /dev/null 2>&1 

我已经检查/ var / log / cron它显示上面的脚本已经被执行,但是它不更新/var/html/www/graphs.png中的图表

解决这个问题:

cp -rf /opt/rrdtool-1.4.4/lib/perl/5.8.8/i386-linux-thread-multi/* / usr / lib / perl / site_perl

拷贝完rrd后在/ usr / lib / perl5 / site_perl问题已经解决了。

我已经创build了PERL5LIB。 创buildPERL5LIB后,我能够手动运行脚本,但它不是由cron运行,所以这就是为什么我要复制文件如上所述。

SELINUX如下:SELINUX =禁用SELINUXTYPE =目标SETLOCALDEFS = 0

你的cron行中有一个明显的错误:你将错误输出redirect到/dev/null 。 不要这样做,看看你的邮件,看看出了什么问题。

cron作业的一个常见问题是它们的环境非常有限:你的.profile不能被读取。 您可能需要为您的脚本定义一些环境variables才能运行。

添加:你做了:

 cp -rf /opt/rrdtool-1.4.4/lib/perl/5.8.8/i386-linux-thread-multi/* /usr/lib/perl/site_perl 

馊主意! 你不应该把你自己的文件放在/usr/usr/local )。 这个区域是包pipe理者保留的。 当然,现在很容易,但是明天你遇到麻烦(比如升级rrdtool的时候),那么很难debugging。

相反,做人们一直推荐的东西,并在你的脚本(或者~/.profile )中定义必要的环境variables。 你需要PERL5LIB (也许还有其他的)。

我的第一个猜测是你的脚本中调用的命令的path。 当从cron调用时,你没有得到你的用户所做的环境设置,所以我会build议在脚本中调用的每个命令都有指定的完整path。

crontab不知道你的shell会运行无壳的。 所以,如果你运行命令..确保它的完整path..如果你读取或写入文件..确保你通过全path也引用它们。

什么发行版,什么cron服务器,向我们展示cron作业configuration,检查/ var / log / cron,检查/ var / log / messages。 大多数发行版都会尝试将cron erros发送给运行它们的用户,检查/ var / spool / mail /(或者实际设置工作邮件发送)。

不相关,但你可以用* / 5代替00,05,10,15 ..等等:-)

这看起来很像SELinux拒绝。