我不熟悉linux/linux环境,所以如果我犯了任何错误,请原谅我,做一下评论澄清。Cronjob在perl脚本中不执行命令行
我创建了一个简单的perl脚本。该脚本创建一个sql文件,如图所示,它将执行要插入数据库的文件中的行。
#!/usr/bin/perl
use strict;
use warnings;
use POSIX 'strftime';
my $SQL_COMMAND;
my $HOST = "i";
my $USERNAME = "need";
my $PASSWORD = "help";
my $NOW_TIMESTAMP = strftime '%Y-%m-%d_%H-%M-%S', localtime;
open my $out_fh, '>>', "$NOW_TIMESTAMP.sql" or die 'Unable to create sql file';
printf {$out_fh} "INSERT INTO BOL_LOCK.test(name) VALUES ('wow');";
sub insert()
{
my $SQL_COMMAND = "mysql -u $USERNAME -p'$PASSWORD' ";
while(my $sql_file = glob '*.sql')
{
my $status = system ("$SQL_COMMAND < $sql_file");
if ($status == 0)
{
print "pass";
}
else
{
print "fail";
}
}
}
insert();
这工作,如果我作为用户登录时(我没有访问管理员)执行它。但是,当我设置一个cronjob运行此文件,让我们在上午10时08说,通过使用行(crontab -e
):
08 10 * * * perl /opt/lampp/htdocs/otpms/Data_Tsunami/scripts/test.pl > /dev/null 2>&1
我知道作为创建SQL文件正在执行的脚本。但是,上午10点08分之后没有新行插入到数据库中。我已经搜索了解决方案,有些人建议使用DBI模块,但它在服务器上不可用。
编辑:没有设法解决它到底。使用root/admin帐户来执行脚本,以便“解决”问题。第一
你是否有理由避免['DBI'模块](http://metacpan.org/module/DBI)? – Borodin
你可以把'printf'改成'print'吗? [docs](http://perldoc.perl.org/functions/printf.html)有一些有趣的说法,就是在文件句柄中使用'printf'并且没有列表。 –
@MattJacob:只使用格式字符串而不使用'printf'没有问题。文档中关于省略的“列表”包含格式,如'printf FH',它等同于'printf FH $ _',但是具有像'printf $ fh'这样的词法文件句柄。Perl将解释为打印到当前 - 选择的输出句柄使用字符串化文件句柄'“$ fh”'作为格式字符串 – Borodin