Назад | Перейти на главную страницу

Как вызвать Perl из crontab?

Я могу запустить эту команду с консоли SSH моего общего хостинга стоечных серверов:

cd /home/myaccount/public_html/whatever; perl -w 
-I/home/myaccount/public_html/whatever rss2txt.pl http://whatever.com/feed

Но когда я ввожу ту же команду, что и задание cron, я получаю:

Can't locate XML/RSS.pm in @INC (@INC contains: /home/myaccount/public_html/whatever /usr/local/lib/perl5/5.8.8/x86_64-linux /usr/local/lib/perl5/5.8.8 /usr/local/lib/perl5/site_perl/5.8.8/x86_64-linux /usr/local/lib/perl5/site_perl/5.8.8 /usr/local/lib/perl5/site_perl . .) at rss2txt.pl line 21. BEGIN failed--compilation aborted at rss2txt.pl line 21.

Несмотря на то, что RSS.pm находится рядом с ним в том же каталоге (/home/myaccount/public_html/whatever), и этот путь указан в @INC, и я сделал cd в нужную папку на всякий случай все равно ныть.

Принимая во внимание, что это виртуальный хостинг, поэтому я не могу изменить глобальные настройки, как мне убедить Perl искать RSS.pm в /home/myaccount/public_html/whatever ?

Не уверен, что это актуально, но вот rss2txt.pl: http://pastebin.com/GWKZtJCN

ramruma предложил превратить это в сценарий оболочки (ниже). Я включаю здесь свою попытку, потому что комментарии не могут быть многострочными:

#!/bin/bash
PERL5LIB=$HOME/public_html/whatever
PATH=$PATH;$HOME/public_html/whatever
cd $HOME/public_html/whatever
perl -w -I$HOME/public_html/whatever rss2txt.pl http://whatever.com/feed

Несмотря на добавление папки в PERL5LIB, PATH и @INC, этот сценарий оболочки даже не работает из консоли SSH. Так что, если мы сможем заставить этот сценарий оболочки работать, я думаю, мы решим проблему.

вы можете добавить локальный каталог в переменную среды PERL5LIB в верхней части скрипта cron следующим образом;

PERL5LIB=/home/myaccount/public_html/whatever:.
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

52 * * * *  /usr/bin/perl -w -I/home/myaccount/public_html/whatever/rss2txt.pl http://whatever.com/feed

Напишите сценарий оболочки, который запускает команду после установки соответствующих переменных среды.