0

我编写了一个 perl 脚本 test.pl,它使用另一个文件 testing .pm 中编写的子例程。我可以手动成功运行此脚本,但是当我在 crontab 上运行相同的脚本时,出现以下错误 我已将两个文件的权限更改为执行权限并在脚本顶部使用。如何在 crontab 上成功运行脚本。
Can't locate testing.pm in @INC
"use testing"

Crontab : */2 * * * * PERL5LIB=$PERL5LIB:/home/test/testing.pm /home/test/test.pl > /home/test/test.log 2>&1

**

test.pl  
#!/usr/bin/perl -w
 use DBI;
 use warnings;
 use Time::Piece;
 use HTML::Entities;
 use lib '/home/test';
 use testing
# Connecting to the database #
my $dbh = DBI->connect("DBI:mysql:database=test;host=localhost;mysql_socket=/var/run/mysqld/mysqld.sock","root","password", {'RaiseError' => 1});
# my $dob = '2009-04-21 00:00:00';
my $dob = '2009-04-22 00:00:00';
#my $dob = localtime->strftime('%Y-%m-%d %H:%M:%S');
print "\ndob : $dob\n";
$name="test";
$number=1;
$email="test@test.com"
$id="123";
if ($mail==0)
{
 send_msg(0,$name,$number,$email,$aid);
}
if ($sms==0)
{
 send_msg(1,$name,$number,$email,$id);
}
}
sub send_msg {
   my ($type,$name,$number,$email,$id) = @_;
   $sql7 = "select Sms,email from settings where Id='$id'";
   $sth7 = $dbh->prepare($sql7);
   $sth7->execute
   or die "SQL Error: $DBI::errstr\n";
   my ($sms,$email)=$sth7->fetchrow_array();
   my $xml=testing::xml($type,$name,$number,$email,$sms,$email);    
}

**

4

3 回答 3

5

您必须告诉您的 Perl 二进制文件在哪里寻找testing.pm. 您可以在您的 crontab 中执行此操作:

0 * * * * PERL5LIB=$PERL5LIB:/directory/where/testing.pm/lives perl myperlscript.pl

或者你可以在你的 .pl 脚本中使用use lib

#!/usr/bin/perl
use strict;
use warnings;
use lib '/directory/where/testing.pm/lives';
...

更新:

您编辑的问题显示了几个问题:

  1. 你的 crontab 说PERL5LIB=$PERL5LIB:/home/test/testing.pm。您需要将目录添加到PERL5LIB文件的路径中。正确的版本是:`PERL5LIB=$PERL5LIB:/home/test'。

  2. test.pluse testing。之后的任何地方都找不到分号testing

于 2013-06-16T13:56:14.327 回答
1

有多种方法可以解决此问题。我的偏好是保持 crontab 简单并添加如下内容:

 use FindBin qw($Bin);
 use lib "$Bin/../lib";

这假定库文件与 perl 脚本有固定的关系。该示例来自模块的文档FindBin

于 2013-06-16T14:02:26.333 回答
0

testing.pm的@INC 数组中有吗?如果没有,您可以通过 PERL5LIB 环境变量添加到 @INC 的路径:

env PERL5LIB=/path/to/testing.pm perl test.pl

use lib qw#/path/to/testing.pm#;或者在脚本顶部使用具有不同路径的 lib 模块 -- -- 。希望能帮到你...

于 2013-06-16T13:57:00.937 回答