2016-06-28 53 views
0

我有一个Perl脚本和CPAN Twitter模块的问题。Crontab和perl

我有一个运行speedtest的脚本,并试图将结果发布到Twitter。

我设法让我的脚本通过从我的用户帐户运行./speedtest.pl手动运行,但是当我尝试使用crontab运行它时,出现错误。

我一直在使用

cpanm Net::Twitter 

(注:没有须藤)安装Net::TwitterFile::HomeDirConfig::Tiny我碰到下面的错误,当我从我的本地运行crontab我的脚本: -

Can't locate Net/Twitter.pm in @INC (you may need to install the 
Net::Twitter module) (@INC contains: /etc/perl /usr/local/lib/arm-linux- 
gnueabihf/perl/5.20.2 /usr/local/share/perl/5.20.2 /usr/lib/arm-linux- 
gnueabihf/perl5/5.20 /usr/share/perl5 /usr/lib/arm-linux-gnueabihf 
/perl/5.20 /usr/share/perl/5.20 /usr/local/lib/site_perl .) at /home/pi 
/speedtest.pl line 99. 
BEGIN failed--compilation aborted at /home/pi/speedtest.pl line 99. 

有人能请我指出正确的方向?我怀疑它与Net::Twitter等最后有什么关系,但我不知道如何解决它,以便crontab知道在哪里可以找到它。

speedtest.pl is here

+1

如果你运行'perl -v'你会得到哪个版本?这看起来像你已经安装了两个版本的Perl。典型的罪魁祸首是'/ usr/bin/perl'和'/ usr/local/bin/perl'这个脚本已被明确告知使用前者。 – Sobrique

+0

perl 5,版本20,subversion 2(v5.20.2) –

回答

1

,你在命令行中运行的Perl安装是由系统中的一个运行不同的,当一个crontab作业执行

尝试which perl,再看看同样的命令的输出在cron下运行

有几种方法可以解决这个问题,具体取决于系统的配置。最明显的是使用你自己的perl副本的完整路径,但虽然这可能会让事情进行,但这可能是一个坏主意

+0

那么我该怎么做?从用户帐户运行'perl'给我'/ usr/bin/perl',但我不知道如何解决这个问题?不知道如何用cron查看它 –

+0

更改脚本 - 放入'#!/ usr/local/bin/perl'。或者'/ usr/bin/perl -MCPAN -e shell'并在站点perl中安装你需要的库。 – Sobrique

+0

文件顶部的'#!/ usr/local/bin/perl'给我提供'-bash:./speedtest.pl:/ usr/bin/local/perl:坏的解释器:当没有这样的文件或目录时我用'。/ speedtest.pl'运行这个文件。 '/ usr/bin/perl -MCPAN -e shell'后跟'install Net :: Twitter,告诉我'Net :: Twitter是最新的(4.01020)'。 –

1

我想你可能已经使用你的本地帐户安装了Net :: Twitter。 登录到根&安装模块应该可以解决这个问题。