Я использую Cent OS 7 и пытаюсь вызвать скрипт Perl для обновления данных телегида Over the Air в формате XML для моего медиасервера Plex.
Проблема в том, что Cron не запускает скрипт.
Если я запускаю скрипт в оболочке, он работает нормально с помощью команды:
/usr/bin/perl /home/Media/Misc/TVXML/hr_epg.pl > /home/Media/Misc/TVXML/test.xml
Если я запущу его через cron (каждую минуту, просто для проверки):
* * * * * /usr/bin/perl /home/Media/Misc/TVXML/hr_epg.pl > /home/Media/Misc/TVXML/test.xml
Ничего не произошло.
Итак, если я запущу cron с помощью:
* * * * * /usr/bin/perl /home/Media/Misc/TVXML/hr_epg.pl > /home/Media/Misc/TVXML/test.xml var1 var2 &>>/home/Media/Misc/TVXML/cron.log
и экспорт cron.log:
Невозможно найти JSON.pm в @INC (@INC содержит: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) в /home/Me$ Ошибка BEGIN — компиляция прервана на строке 4 /home/Media/Misc/TVXML/hr_epg.pl.
Строка 4: использовать JSON;
Проверка Perl:
perl -E'say $^X' /usr/bin/perl
cpan JSON:
cpan JSON Чтение базы данных '/root/.cpan/Metadata' было создано в субботу, 29 июня 2019 г. 00:55:31 GMT Извлечение с помощью LWP: http://mirrors.namecheap.com/CPAN/authors/01mailrc.txt.gz Чтение '/root/.cpan/sources/authors/01mailrc.txt.gz' ............................................................................ЗАВЕРШЕНО Извлечение с помощью LWP: http://mirrors.namecheap.com/CPAN/modules/02packages.details.txt.gz Чтение базы данных '/root/.cpan/sources/modules/02packages.details.txt.gz' было создано в воскресенье, 30 июня 2019 г., 01:56:15 GMT ............. Доступна новая версия CPAN.pm (v2.26). [Текущая версия — v1.9800] Возможно, вы захотите установить CPAN reload cpan, чтобы обновить CPAN.pm и запустить новую версию, не выходя из текущего сеанса.
...............................................................ГОТОВО Загрузка с помощью LWP: http://mirrors.namecheap.com/CPAN/modules/03modlist.data.gz Чтение '/root/.cpan/sources/modules/03modlist.data.gz' ВЫПОЛНЕНО Запись /root/.cpan/Metadata JSON актуальна (4.02).
Если кто-то сможет мне помочь, поскольку JSON там есть, а этот скрипт работает через CLI, это было бы здорово.
Спасибо
решение1
Кажется, есть несоответствие между @INC
выполнением через cron и @INC
выполнением вручную в терминале.
В любом случае найдите каталог, в котором находится библиотека:locate JSON.pm
Допустим, каталог — /usr/libs
, добавьте эту строку в начало вашего скрипта:
use lib '/usr/libs";