0

別のファイル testing .pm に記述されたサブルーチンを使用する perl スクリプト test.pl を作成しました。このスクリプトを手動で正常に実行できますが、同じスクリプトを crontab で実行すると、次のエラーが表示されます。I have changed the permissions of the both the files to execute permission and used at the top. 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.pl言うuse 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 に答える