Я создаю свои системные графики в rrd с помощью сценария perl. Когда я запускаю скрипт вручную, он обновляет графики. С другой стороны, 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 = отключен SELINUXTYPE = целевой SETLOCALDEFS = 0
В вашей строке 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
(и, возможно, другие).
Мое первое предположение - это пути к командам, вызываемым в вашем скрипте. При вызове из cron вы не получаете настройки среды, которые делает ваш пользователь, поэтому я бы рекомендовал каждой команде, вызываемой в скрипте, указывать полный путь.
crontab не знает переменных, которые знает ваша оболочка, поскольку она работает без оболочки. Поэтому, если вы запускаете команды ... убедитесь, что это полный путь ... если вы читаете или записываете файлы ... убедитесь, что вы также ссылаетесь на них через полный путь.
какой дистрибутив, какой сервер cron, покажите нам конфигурацию задания cron, проверьте / var / log / cron, проверьте / var / log / messages. большинство дистрибутивов попытаются отправить сообщение об ошибке cron пользователю, который их запустил, проверить / var / spool / mail / (или фактически настроить доставку рабочей почты).
Не связано, но вы можете заменить 00,05,10,15 ... и т. Д. На * / 5 :-)
Это очень похоже на отказ SELinux.