X-Git-Url: http://git.ipfire.org/?p=people%2Fstevee%2Fguardian.git;a=blobdiff_plain;f=guardian;h=2a5b460da4d37137e43211570007da01d28b155d;hp=22856c9395b087be9caffb8072775ce920bed307;hb=624876cf46b75ab7078c31d81b4cd339b499e562;hpb=aab61123f038b5f411a0f6cd05202a335e9d1221 diff --git a/guardian b/guardian index 22856c9..2a5b460 100644 --- a/guardian +++ b/guardian @@ -29,6 +29,7 @@ use Time::HiRes qw[ time sleep ]; require Guardian::Base; require Guardian::Config; +require Guardian::Daemon; require Guardian::Logger; require Guardian::Parser; require Guardian::Socket; @@ -65,6 +66,11 @@ if (defined($cmdargs{"help"})) { exit; } +# Check if another instance of guardian is allready running. +if (&Guardian::Daemon::IsRunning()) { + die "Another instance of Guardian is allready running...\n"; +} + # Read-in the configuration file and store the settings. # Push the may be given config file argument. my %mainsettings = &Guardian::Config::UseConfig($cmdargs{"config"}); @@ -92,6 +98,15 @@ my $queue :shared = new Thread::Queue or die "Could not create new, empty queue. # (Does not include the socket thread) my @running_workers; +# Check if guardian should be daemonized or keep in the foreground. +unless (defined($cmdargs{"foreground"})) { + # Fork into background. + &Guardian::Daemon::Daemonize(); +} else { + # Write PID (process-id). + &Guardian::Daemon::WritePID(); +} + # Call Init function to initzialize guardian. &Init(); @@ -372,6 +387,9 @@ sub Shutdown () { # Remove socket file on exit. &Guardian::Socket::RemoveSocketFile(); + # Remove pid file on exit. + &Guardian::Daemon::RemovePIDFile(); + # Sleep for one second to give perl some # time to proper clean up everything before # exiting.