X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2Fbin%2Ffreeside-queued;h=ffd017a41eb1e77e3f3c484247334b62ad90cb70;hb=63a268637b2d51a8766412617724b9436439deb6;hp=e97a52caba84644bd88382c46775e2a24e2dbd03;hpb=3cd902f4cad7410785e4640fce5d1fc45fb10c5e;p=freeside.git diff --git a/FS/bin/freeside-queued b/FS/bin/freeside-queued index e97a52cab..ffd017a41 100644 --- a/FS/bin/freeside-queued +++ b/FS/bin/freeside-queued @@ -1,7 +1,7 @@ #!/usr/bin/perl -w use strict; -use vars qw( $DEBUG $kids $max_kids %kids ); +use vars qw( $DEBUG $kids $max_kids $sleep_time %kids ); use POSIX qw(:sys_wait_h); use IO::File; use Getopt::Std; @@ -54,6 +54,7 @@ daemonize2(); my $conf = new FS::Conf; $max_kids = $conf->config('queued-max_kids') || 10; +$sleep_time = $conf->config('queued-sleep_time') || 10; my $warnkids=0; while (1) { @@ -107,12 +108,20 @@ while (1) { $hashref->{'secure'} = ''; } - my @jobs = qsearch({ - 'table' => 'queue', - 'hashref' => $hashref, - 'extra_sql' => $nodepend, - 'order_by' => $order_by, - }); + #qsearch dies when the db goes away + my @jobs = eval { + qsearch({ + 'table' => 'queue', + 'hashref' => $hashref, + 'extra_sql' => $nodepend, + 'order_by' => $order_by, + }); + }; + if ( $@ ) { + warn "WARNING: error searching for jobs, closing connection: $@"; + undef $FS::UID::dbh; + next; + } unless ( @jobs ) { dbh->commit or do { @@ -120,7 +129,7 @@ while (1) { undef $FS::UID::dbh; next; }; - sleep 1; + sleep $sleep_time; next; } @@ -145,7 +154,12 @@ while (1) { $FS::UID::AutoCommit = 1; - my @args = $ljob->args; + my @args = eval { $ljob->args; }; + if ( $@ ) { + warn "WARNING: error retrieving job arguments, closing connection: $@"; + undef $FS::UID::dbh; + next; + } splice @args, 0, 1, $ljob if $args[0] eq '_JOB'; defined( my $pid = fork ) or do { @@ -155,7 +169,7 @@ while (1) { $hash{'statustext'} = "[freeside-queued] can't fork: $!"; my $ljob = new FS::queue ( \%hash ); my $error = $ljob->replace($job); - die $error if $error; + die $error if $error; #XXX still dying if we can't fork AND we can't connect to the db next; #don't increment the kid counter };