X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2Fbin%2Ffreeside-queued;h=b9ef09cd1c0f278b11fd9487b0e63d20a684af6f;hp=a3fb7e562a577ff35d942813fa7a132c0567618f;hb=beba6672fb9c9c5769c81f8029bb88cd2bc910e9;hpb=3d08b7bbf79c0131497d4812c552efe8a89d4cf3 diff --git a/FS/bin/freeside-queued b/FS/bin/freeside-queued index a3fb7e562..b9ef09cd1 100644 --- a/FS/bin/freeside-queued +++ b/FS/bin/freeside-queued @@ -1,13 +1,11 @@ #!/usr/bin/perl -w use strict; -use vars qw( $log_file $sigterm $sigint $kids $max_kids %kids ); -use subs qw( _die _logmsg ); -use Fcntl qw(:flock); -use POSIX qw(:sys_wait_h setsid); -use Date::Format; +use vars qw( $DEBUG $kids $max_kids %kids ); +use POSIX qw(:sys_wait_h); use IO::File; use FS::UID qw(adminsuidsetup forksuidsetup driver_name dbh myconnect); +use FS::Daemon qw(daemonize1 drop_root logfile daemonize2 sigint sigterm); use FS::Record qw(qsearch qsearchs); use FS::queue; use FS::queue_depend; @@ -18,40 +16,24 @@ use FS::svc_acct; use Net::SSH 0.07; use FS::part_export; +$DEBUG = 0; + $max_kids = '10'; #guess it should be a config file... $kids = 0; my $user = shift or die &usage; -#my $pid_file = "/var/run/freeside-queued.$user.pid"; -my $pid_file = "/var/run/freeside-queued.pid"; - -&daemonize1; - -#sub REAPER { my $pid = wait; $SIG{CHLD} = \&REAPER; $kids--; } -#$SIG{CHLD} = \&REAPER; +warn "starting daemonization (forking)\n" if $DEBUG; +#daemonize1('freeside-queued',$user); #to keep pid files unique w/multi installs +daemonize1('freeside-queued'); -$sigterm = 0; -$sigint = 0; -$SIG{INT} = sub { warn "SIGINT received; shutting down\n"; $sigint++; }; -$SIG{TERM} = sub { warn "SIGTERM received; shutting down\n"; $sigterm++; }; +warn "dropping privledges\n" if $DEBUG; +drop_root(); -my $freeside_gid = scalar(getgrnam('freeside')) - or die "can't setgid to freeside group\n"; -$) = $freeside_gid; -$( = $freeside_gid; -#if freebsd can't setuid(), presumably it can't setgid() either. grr fleabsd -($(,$)) = ($),$(); -$) = $freeside_gid; - -$> = $FS::UID::freeside_uid; -$< = $FS::UID::freeside_uid; -#freebsd is sofa king broken, won't setuid() -($<,$>) = ($>,$<); -$> = $FS::UID::freeside_uid; $ENV{HOME} = (getpwuid($>))[7]; #for ssh +warn "connecting to database\n" if $DEBUG; $@ = 'not connected'; while ( $@ ) { eval { adminsuidsetup $user; }; @@ -62,14 +44,12 @@ while ( $@ ) { } } -$log_file = "/usr/local/etc/freeside/queuelog.". $FS::UID::datasrc; - -&daemonize2; +logfile( "/usr/local/etc/freeside/queuelog.". $FS::UID::datasrc ); -$SIG{__DIE__} = \&_die; -$SIG{__WARN__} = \&_logmsg; +warn "completing daemonization (detaching))\n" if $DEBUG; +daemonize2(); -warn "freeside-queued starting\n"; +#-- my $warnkids=0; while (1) { @@ -225,11 +205,11 @@ while (1) { } } continue { - if ( $sigterm ) { + if ( sigterm() ) { warn "received TERM signal; exiting\n"; exit; } - if ( $sigint ) { + if ( sigint() ) { warn "received INT signal; exiting\n"; exit; } @@ -239,48 +219,6 @@ sub usage { die "Usage:\n\n freeside-queued user\n"; } -sub _die { - my $msg = shift; - unlink $pid_file if -e $pid_file; - _logmsg($msg); -} - -sub _logmsg { - chomp( my $msg = shift ); - my $log = new IO::File ">>$log_file"; - flock($log, LOCK_EX); - seek($log, 0, 2); - print $log "[". time2str("%a %b %e %T %Y",time). "] [$$] $msg\n"; - flock($log, LOCK_UN); - close $log; -} - -sub daemonize1 { - - chdir "/" or die "Can't chdir to /: $!"; - open STDIN, '/dev/null' or die "Can't read /dev/null: $!"; - defined(my $pid = fork) or die "Can't fork: $!"; - if ( $pid ) { - print "freeside-queued started with pid $pid\n"; #logging to $log_file\n"; - exit unless $pid_file; - my $pidfh = new IO::File ">$pid_file" or exit; - print $pidfh "$pid\n"; - exit; - } - #open STDOUT, '>/dev/null' - # or die "Can't write to /dev/null: $!"; - #setsid or die "Can't start a new session: $!"; - #open STDERR, '>&STDOUT' or die "Can't dup stdout: $!"; - -} - -sub daemonize2 { - open STDOUT, '>/dev/null' - or die "Can't write to /dev/null: $!"; - setsid or die "Can't start a new session: $!"; - open STDERR, '>&STDOUT' or die "Can't dup stdout: $!"; -} - sub reap_kids { foreach my $pid ( keys %kids ) { my $kid = waitpid($pid, WNOHANG);