【发布时间】:2015-11-12 03:59:34
【问题描述】:
我对linux/linux环境不熟悉,如有错误请见谅,评论澄清。
我创建了一个简单的 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 点 8 分使用以下行(在 crontab -e):
08 10 * * * perl /opt/lampp/htdocs/otpms/Data_Tsunami/scripts/test.pl > /dev/null 2>&1
我知道脚本在创建 sql 文件时正在执行。但是,上午 10.08 之后没有新行插入到数据库中。我已经搜索了解决方案,有些人建议使用 DBI 模块,但它在服务器上不可用。
编辑:最终没有设法解决它。使用 root/admin 帐户来执行脚本以便“解决”问题。
【问题讨论】:
-
你有理由避开
DBImodule吗? -
你能把你的
printf改成print吗? docs 对使用带有文件句柄和不带列表的printf有一些有趣的说法。 -
@MattJacob:使用
printf没有任何问题,只有一个格式字符串,没有参数。文档中谈到省略的“列表”包括格式,如printf FH,它等同于printf FH $_,但具有像printf $fh这样的词法文件句柄,Perl 解释为打印到当前选择的输出句柄,使用字符串化文件句柄"$fh"作为格式字符串