Subversion Repositories DevTools

Rev

Rev 3847 | Rev 7387 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3847 Rev 5398
Line 129... Line 129...
129
    open STDIN, '>/dev/null' or $logger->err("$msg $!");
129
    open STDIN, '>/dev/null' or $logger->err("$msg $!");
130
    open STDOUT, '>/dev/null' or $logger->err("$msg $!");
130
    open STDOUT, '>/dev/null' or $logger->err("$msg $!");
131
    open STDERR, '>/dev/null' or $logger->err("$msg $!");
131
    open STDERR, '>/dev/null' or $logger->err("$msg $!");
132
    defined (my $pid = fork) or $logger->err("Can't fork: $!");
132
    defined (my $pid = fork) or $logger->err("Can't fork: $!");
133
    exit if $pid;
133
    exit if $pid;
134
	
134
    
135
    setsid or $logger->err("Can't start a new session: $!");
135
    setsid or $logger->err("Can't start a new session: $!");
136
    $logger->logmsg('Writing pid');
136
    $logger->logmsg('Writing pid');
137
}
137
}
138
 
138
 
139
#
139
#
Line 164... Line 164...
164
 
164
 
165
        #
165
        #
166
        #   Fork then exec
166
        #   Fork then exec
167
        #
167
        #
168
        $logger->logmsg("Starting $target");
168
        $logger->logmsg("Starting $target");
169
	    defined (my $pid = fork) or $logger->err("Can't fork: $!");
169
        defined (my $pid = fork) or $logger->err("Can't fork: $!");
170
        if ( $pid )
170
        if ( $pid )
171
        {
171
        {
172
            #
172
            #
173
            #   Parent process. Save PID for dead child testing
173
            #   Parent process. Save PID for dead child testing
174
            #
174
            #
175
            $children{$target}{pid} = $pid;
175
            $children{$target}{pid} = $pid;
176
	        next;
176
            next;
177
        }
177
        }
178
 
178
 
179
        #
179
        #
180
        #   Child process at this point
180
        #   Child process at this point
181
        #
181
        #
Line 282... Line 282...
282
#
282
#
283
# Returns         : Nothing
283
# Returns         : Nothing
284
#
284
#
285
sub sighandlers
285
sub sighandlers
286
{
286
{
287
	my $conf = shift;
287
    my $conf = shift;
288
	my $logger = $conf->{logger};
288
    my $logger = $conf->{logger};
289
 
289
 
290
	$SIG{TERM} = sub {
290
    $SIG{TERM} = sub {
291
		# On shutdown
291
        # On shutdown
292
		$logger->logmsg('Received SIGTERM. Shutting down....' );
292
        $logger->logmsg('Received SIGTERM. Shutting down....' );
293
        foreach my $entry ( keys %children )
293
        foreach my $entry ( keys %children )
294
        {
294
        {
295
            my $pid = $children{$entry}{pid};
295
            my $pid = $children{$entry}{pid};
296
    		$logger->logmsg('Terminate child: ' . $pid);
296
            $logger->logmsg('Terminate child: ' . $pid);
297
            kill 15, $pid;
297
            kill 15, $pid;
298
        }
298
        }
299
 
299
 
300
		unlink $conf->{'pidfile'} if -f $conf->{'pidfile'};
300
        unlink $conf->{'pidfile'} if -f $conf->{'pidfile'};
301
		exit 0;
301
        exit 0;
302
	};
302
    };
303
 
303
 
304
	$SIG{HUP} = sub {
304
    $SIG{HUP} = sub {
305
		# On logrotate
305
        # On logrotate
306
		$logger->logmsg('Received SIGHUP.');
306
        $logger->logmsg('Received SIGHUP.');
307
		$logger->rotatelog();
307
        $logger->rotatelog();
308
        foreach my $entry ( keys %children )
308
        foreach my $entry ( keys %children )
309
        {
309
        {
310
            my $pid = $children{$entry}{pid};
310
            my $pid = $children{$entry}{pid};
311
    		$logger->logmsg('Signal HUP to child: ' . $pid);
311
            $logger->logmsg('Signal HUP to child: ' . $pid);
312
            kill 1, $pid;
312
            kill 1, $pid;
313
        }
313
        }
314
	};
314
    };
315
 
315
 
316
	$SIG{USR1} = sub {
316
    $SIG{USR1} = sub {
317
		# On Force Archive Sync
317
        # On Force Archive Sync
318
		$logger->logmsg('Received SIGUSR1.');
318
        $logger->logmsg('Received SIGUSR1.');
319
        foreach my $entry ( keys %children )
319
        foreach my $entry ( keys %children )
320
        {
320
        {
321
            my $pid = $children{$entry}{pid};
321
            my $pid = $children{$entry}{pid};
322
    		$logger->logmsg('Signal USR1 to child: ' . $pid);
322
            $logger->logmsg('Signal USR1 to child: ' . $pid);
323
            kill 'USR1', $pid;
323
            kill 'USR1', $pid;
324
        }
324
        }
325
	};
325
    };
326
}
326
}
327
 
327