我编写了一个perl脚本test.pl,它使用了另一个文件测试.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);
}
Run Code Online (Sandbox Code Playgroud)
**
您必须告诉您的Perl二进制文件在哪里查找testing.pm.您可以在crontab中执行此操作:
0 * * * * PERL5LIB=$PERL5LIB:/directory/where/testing.pm/lives perl myperlscript.pl
Run Code Online (Sandbox Code Playgroud)
或者您可以使用use lib以下命令在.pl脚本中执行以下操作:
#!/usr/bin/perl
use strict;
use warnings;
use lib '/directory/where/testing.pm/lives';
...
Run Code Online (Sandbox Code Playgroud)
更新:
您编辑的问题显示了几个问题:
你的crontab说PERL5LIB=$PERL5LIB:/home/test/testing.pm.您需要将添加目录到PERL5LIB不是文件路径.正确的版本是:`PERL5LIB = $ PERL5LIB:/ home/test'.
你test.pl说的use testing.之后的任何地方都没有分号testing.