Perl脚本从crontab而不是命令行失败



我有一个perl脚本,旨在连接到MS SQL服务器DB。它使用DBI模块。

由于某些原因,我可以从命令行执行脚本,它工作正常,但当我把它放入Crontab时,它失败了,出现以下错误:

DBI对象版本1.627与引导参数1.643不匹配/usr/lib64/perl5/DynaLoader。下午213线。开始——编译失败在/usr/local/lib64/perl5/dbi终止。PM 284行。编译失败在require/app/www/tools/GoSet/art_db_insert.pl行BEGIN失败——编译在/app/www/tools/GoSet/art_db_insert.pl 5.

我已经验证了我的'which perl'与脚本中的shebang行匹配。我还验证了如果我执行'perldoc -m DBI',它显示的是1.643版本。我不知道它从哪里得到1.627版本,或者为什么它从命令行而不是crontab工作。

我在crontab中有其他perl脚本工作得很好,但这是唯一一个有错误的(也是唯一一个使用DBI的)。

任何想法?

crontab行:

19 6-17 * * 1-5 cd /app/www/tools/GoSet&& perl /app/www/tools/GoSet/art_db_insert.pl > /app/www/tools/GoSet/artcron.log 2>&1 
$ perl -M5.010 -e'
say "INC:"; say "  $_" for @INC;
say "ENV:"; say "  $_: $ENV{$_}" for sort grep /^PERL/, keys %ENV;
'
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
.
ENV:

运行perl path/to/yourscript.pl时,shebang行被忽略。要使脚本由shebang行中定义的解释器运行,必须使其可执行(chmod +x),然后作为./yourscript.plpath/to/yourscript.pl调用。

当文件作为位置参数传递给二进制文件时,shebang行被简单地解析为常规注释,没有作用。

最新更新