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