|
@@ -1,75 +0,0 @@
|
|
|
-#!/usr/bin/env perl
|
|
|
|
|
-
|
|
|
|
|
-use FindBin::libs;
|
|
|
|
|
-use FindBin;
|
|
|
|
|
-use Proc::Daemon;
|
|
|
|
|
-
|
|
|
|
|
-use strict;
|
|
|
|
|
-use warnings;
|
|
|
|
|
-
|
|
|
|
|
-use Trog::Autoreload;
|
|
|
|
|
-
|
|
|
|
|
-# Note that we do not reload ourselves.
|
|
|
|
|
-
|
|
|
|
|
-sub cleanup {
|
|
|
|
|
- unlink 'run/monitor.pid';
|
|
|
|
|
- return 0;
|
|
|
|
|
-};
|
|
|
|
|
-
|
|
|
|
|
-$SIG{HUP} = sub {
|
|
|
|
|
- print "Recieved signal from tcms master process, restarting.\n";
|
|
|
|
|
- cleanup();
|
|
|
|
|
- exec $0;
|
|
|
|
|
-};
|
|
|
|
|
-
|
|
|
|
|
-sub get_master_pid {
|
|
|
|
|
- # Get the PID of the current master process
|
|
|
|
|
- my $ppf = 'run/tcms.pid';
|
|
|
|
|
- my $ppid;
|
|
|
|
|
- if (-f $ppf) {
|
|
|
|
|
- open(my $pidfile, '<', $ppf);
|
|
|
|
|
- read($pidfile, $ppid, 10000);
|
|
|
|
|
- close $pidfile;
|
|
|
|
|
- chomp $ppid;
|
|
|
|
|
- if (!-d "/proc/$ppid") {
|
|
|
|
|
- print "tCMS not running, but left a PIDFile behind. Exiting monitor.\n";
|
|
|
|
|
- exit 0 if -f "/run/$ppid";
|
|
|
|
|
- }
|
|
|
|
|
- } else {
|
|
|
|
|
- print "tCMS not running, exiting monitor.\n";
|
|
|
|
|
- exit 0;
|
|
|
|
|
- }
|
|
|
|
|
- return $ppid;
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-sub main {
|
|
|
|
|
- my $pf = 'run/monitor.pid';
|
|
|
|
|
- my $monitor_pid = Trog::Autoreload::monitor_pid();
|
|
|
|
|
- if ($monitor_pid) {
|
|
|
|
|
- print "Change monitor already running, killing and re-starting.\n";
|
|
|
|
|
- kill 'TERM', $monitor_pid;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- # daemonize immediately. We are handling the pidfile ourselves, see below
|
|
|
|
|
- my $daemon = Proc::Daemon->new(
|
|
|
|
|
- work_dir => "$FindBin::Bin/..",
|
|
|
|
|
- pid_file => $pf,
|
|
|
|
|
- child_STDOUT => 'logs/monitor.log',
|
|
|
|
|
- child_STDERR => 'logs/monitor.err',
|
|
|
|
|
- );
|
|
|
|
|
- my $child_pid = $daemon->Init;
|
|
|
|
|
- return 0 if $child_pid;
|
|
|
|
|
-
|
|
|
|
|
- my $ppid = get_master_pid();
|
|
|
|
|
- # If we go here, we (probably) have a PID, so watch for the changes.
|
|
|
|
|
- my $status = Trog::Autoreload::watch_for_changes('lib', $ppid);
|
|
|
|
|
- if ($status) {
|
|
|
|
|
- # tCMS process went away. Bye bye!
|
|
|
|
|
- print "tCMS process went away, shutting down monitor\n";
|
|
|
|
|
- return cleanup();
|
|
|
|
|
- }
|
|
|
|
|
- # By now we should have recieved SIGHUP and are already dead, so exit anyways.
|
|
|
|
|
- return cleanup();
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-exit main(@ARGV) unless caller;
|
|
|