我使用 perl 脚本在 rrd 中创建系统图表。当我手动运行脚本时,它会更新图表。另一方面,cron 在日志中显示作业已执行,但它不会更新图表。有什么帮助吗?
我已将 apache2 目录权限 root:apache 设置为 770
发行版:CentOs 5.5。
Cron配置:
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 中后,问题已解决。
我已经创建了 PERL5LIB。创建 PERL5LIB 后,我可以手动运行脚本,但它不是由 cron 运行的,因此我必须复制上述文件。
SELINUX如下:SELINUX=disabled SELINUXTYPE=targeted SETLOCALDEFS=0
答案1
您的 cron 行中有一个明显的错误:您将错误输出重定向到/dev/null
。不要这样做,请查看您的邮件以查看出了什么问题。
cron 作业的一个常见问题是它们获得的环境非常有限:.profile
无法读取您的脚本。您可能需要为要运行的脚本定义一些环境变量。
添加:你做了:
cp -rf /opt/rrdtool-1.4.4/lib/perl/5.8.8/i386-linux-thread-multi/* /usr/lib/perl/site_perl
坏主意!你不应该把自己的文件放在里面/usr
(外面/usr/local
)。那个区域是为包管理器保留的。当然,现在很容易,但你将要明天遇到麻烦(例如当您升级 rrdtool 时),那时调试就会很困难。
相反,按照人们所建议的做,并在脚本(或源~/.profile
)中定义必要的环境变量;您需要PERL5LIB
(也许其他人也需要)。
答案2
我的第一个猜测是脚本中调用的命令的路径。从 cron 调用时,您无法获得用户的环境设置,因此我建议在脚本中调用的每个命令都指定完整路径。
答案3
crontab 无法识别 shell 变量,因为它是在无 shell 环境下运行的。因此,如果您运行命令,请确保其路径完整。如果您读取或写入文件,请确保也通过完整路径引用它们。
答案4
不相关,但你可以用 */5 替换 00,05,10,15 .. 等 :-)