[英]Execute fail in perl dbi
一段代碼。 腳本必須成為惡魔,連接到兩個數據庫,並不斷檢查某些字段。 但是我收到錯誤。 日志DBD::Pg::st execute failed: SSL connection has been closed unexpectedly at ./remote_imap.pl line 55.
數據庫日志為空。
my $daemon = Proc::Daemon->new;
Proc::Daemon::Init({
work_dir => '/home/olex/develop',
child_STDOUT => '/home/olex/develop/output.file',
child_STDERR => '+>>debug.txt',
pid_file => 'remote_imap.pid'
});
if (Proc::PID::File->running({dir=>'/home/olex/develop', verify=>1})) {
print "Already running\n";
exit 0;
}
my @kids = (0..3);
my @childs;
my $kid_pid;
my ($dbname,$dbuser,$dbpass) = ('***','**','***');
my ($dbhost, $dbhost_ag, $dbport) = ('192.168.0.**', '192.168.0.**', '5432');
my $dbh = DBI->connect("dbi:Pg:dbname=$dbname;host=$dbhost;port=$dbport", $dbuser, $dbpass,
{ RaiseError => 1
, AutoCommit => 0 })
or die $DBI::errstr;
my $dbh_ag = DBI->connect("dbi:Pg:dbname=$dbname;host=$dbhost_ag;port=$dbport", $dbuser, $dbpass,
{ RaiseError => 1
, AutoCommit => 0 })
or die $DBI::errstr;
my $status;
my $continue = 1;
$SIG{TERM} = sub { $continue = 0 };
while ($continue) {
foreach $kid_pid (@kids) {
$status = $daemon->Status($kid_pid);
if (!$status){
$kid_pid = $daemon->Init( {
work_dir => '/home/olex/develop',
pid_file => 'kid_pid.pid',
exec_command => 'perl /home/olex/develop/remote_imapd.pl',
} );
}
push @childs, $kid_pid;
}
my @params;
$params[0] = 2; #DB_USERS_REMOTE_STATUS_PROCESSING
$params[1] = 1; #DB_IN_QUEUE_STATUS_NEW
my $childs_proc = join(',', @childs);
# Fetch new records
my $q = "select id from queues.queue_in where status=? and user_remote_id>? order by date_create asc";
my $sth_ag = $dbh_ag->prepare($q);
my $rv_ag = $sth_ag->execute($params[1], 0);
my $id = $sth_ag->fetchrow_array();
print $id, "\n";
*
*
*
sleep(0.0001);
}
$dbh->disconnect();
$dbh_ag->disconnect();
如果我刪除此代碼,則可以正常工作。
foreach $kid_pid (@kids) {
$status = $daemon->Status($kid_pid);
if (!$status){
$kid_pid = $daemon->Init( {
work_dir => '/home/olex/develop',
pid_file => 'kid_pid.pid',
exec_command => 'perl /home/olex/develop/remote_imapd.pl',
} );
}
push @childs, $kid_pid;
}
perl v5.18.2 PostgreSQL v8.4
可能是什么問題呢?
派生孩子守護程序后,打開數據庫。 根據我的經驗,DB連接幾乎永遠無法幸免。
因此,當您卸下貨叉時,它會起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.