Я могу запустить эту команду с консоли 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
Напишите сценарий оболочки, который запускает команду после установки соответствующих переменных среды.