diff --git a/resmon b/resmon index fd78b852d33f7fae6de53ca9f1545a5f4ee27a8c..5bd1cf6a097e48fd4798ebf9243644c6b170b75f 100755 --- a/resmon +++ b/resmon @@ -13,7 +13,7 @@ use POSIX qw( :sys_wait_h setsid ); use Getopt::Long; use Data::Dumper; use vars qw($config_file $debug $status_file $interface $port $config -$status $update); +$status $update $pid_file); use Resmon::Config; use Resmon::ExtComm; @@ -26,6 +26,7 @@ GetOptions( "d" => \$debug, "f=s" => \$status_file, "u" => \$update, + "r=s" => \$pid_file, ); if ($update) { @@ -42,6 +43,7 @@ sub configure { $config->{statusfile} = $status_file if($status_file); $config->{port} = $port if($port); $config->{interface} = $interface if($interface); + $config->{pidfile} = $pid_file if ($pid_file); } configure(); @@ -77,7 +79,15 @@ unless($debug) { open(STDIN, "</dev/null"); open(STDOUT, ">/dev/null"); open(STDERR, ">/dev/null"); - fork && exit; + my $pid=fork; + if ($pid) { + if (my $PIDFILE=$config->{pidfile}) { + open(PIDFILE,">$PIDFILE") or die "can't open >$PIDFILE"; + print PIDFILE $pid; + close PIDFILE or die "can't close $PIDFILE"; + } + exit; + } } my $list = []; diff --git a/resources/resmon-systemd.service b/resources/resmon-systemd.service index 7d6422bef296810d1d9f6f8ba3146f331d257552..2bc61e067044d90ce46ae632c36ab25adf676726 100644 --- a/resources/resmon-systemd.service +++ b/resources/resmon-systemd.service @@ -5,8 +5,10 @@ After=network.target [Service] Type=forking -ExecStart=/opt/resmon/resmon +ExecStart=/opt/resmon/resmon -r /run/resmon.pid Restart=on-failure +PIDFile=/run/resmon.pid +ExecReload=/bin/kill -HUP $MAINPID [Install] WantedBy=multi-user.target