Title: [opsview] [11817] re-exec itself once a day
Revision
11817
Author
aburzynski
Date
2013-03-15 14:45:07 +0000 (Fri, 15 Mar 2013)

Log Message

re-exec itself once a day

Modified Paths


Modified: trunk/opsview-core/bin/import_ndologsd
===================================================================
--- trunk/opsview-core/bin/import_ndologsd	2013-03-15 14:36:03 UTC (rev 11816)
+++ trunk/opsview-core/bin/import_ndologsd	2013-03-15 14:45:07 UTC (rev 11817)
@@ -36,11 +36,16 @@
 use lib $Bin, "$Bin/../lib", "$Bin/../etc", "$Bin/../perl/lib";
 use Log::Log4perl;
 use POSIX;
+use Cwd qw(abs_path);
 use Time::HiRes qw(gettimeofday);
 use Opsview::Utils::NDOLogsImporter;
 
-$0 = "import_ndologsd";
+my $MAX_RUN_TIME = 3600 * 24;   # once a day
+my $REAL_PATH    = abs_path($0);
 
+# close-on-exec
+$^F = 2;
+
 my $rootdir    = "/usr/local/nagios";
 my $import_dir = "$rootdir/var/ndologs";
 
@@ -57,7 +62,10 @@
     my $pid = <$fh>;
     close $fh;
     if ( kill 0, $pid ) {
-        $logger->logdie( "import_ndologsd already running as process $pid" );
+        unless ( scalar @ARGV ) {
+            $logger->logdie( "import_ndologsd already running as process $pid"
+            );
+        }
     }
     else {
         $logger->warn( "Crash from previous run. Deleting pid file" );
@@ -65,6 +73,8 @@
     }
 }
 
+$0 = "import_ndologsd";
+
 $SIG{__DIE__} = \&cleanup;
 
 my $pid = fork;
@@ -103,6 +113,7 @@
 chdir($import_dir) or $logger->logdie( "Cannot chdir: $!" );
 my $last_update = 0;
 my $c           = 0;
+my $started_at  = time();
 MAINLOOP:
 until ($break) {
 
@@ -155,6 +166,15 @@
         $last_update = $dir_update;
     }
 
+    # re-execute itself if running for more then $MAX_RUN_TIME
+    if ( time() - $started_at > $MAX_RUN_TIME ) {
+        $logger->info(
+            "Restarting after running for more then $MAX_RUN_TIME seconds"
+        );
+        exec( $^X, $REAL_PATH, 'restart' );
+        die "Cannot exec: $!";
+    }
+
     # Directory would have changed from our last import, so expect above if to succeed
     # But allows a next check to run if more files have been added
     sleep 1 unless $found;

_______________________________________________
Opsview-checkins mailing list
Opsview-checkins@lists.opsview.org
http://lists.opsview.org/lists/listinfo/opsview-checkins

Reply via email to