nut: Fix nutmon issues with init
authorDaniel F. Dickinson <redacted>
Sun, 28 Apr 2019 20:08:45 +0000 (20:08 +0000)
committerDaniel F. Dickinson <redacted>
Sun, 28 Apr 2019 20:17:12 +0000 (20:17 +0000)
NUT's upsmon is rather peculiar in that it has a child process that runs as
a regular user and a parent process that runs as root (in order to facilitate
shutting down the device if needed).  procd doesn't deal well with this and
doing 'normal' procd stop / restart / etc results in the child process still
hanging around but with not parent, which causes undesired behaviour.  Therefore,
add the use of 'upsmon -c stop' during process shutdown / restart in order to
ensure that upsmon is actually fully stopped.

Also fixes nut-monitor going into crashloop on network changes (due to
trigger that restarted upsmon but failed due to orphan child from before
restart).

Signed-off-by: Daniel F. Dickinson <redacted>
net/nut/files/nut-monitor.init

index bc463d7f583046cfbda8b3595c8a1d834c807440..e57a2870bccbcd168c3dac639e113059e9f8dfd2 100755 (executable)
@@ -148,7 +148,6 @@ nut_upsmon_add() {
 }
 
 build_config() {
-       local runas=nutmon
        mkdir -m 0750 -p "$(dirname "$UPSMON_C")"
 
        config_load nut_monitor
@@ -193,6 +192,7 @@ interface_triggers() {
 }
 
 start_service() {
+       local runas=nutmon
        local havemon havems
        build_config
 
@@ -210,16 +210,9 @@ start_service() {
        return 0
 }
 
-restart() {
-       trap '' TERM
-       stop "$@"
-       sleep 2
-       trap - TERM
-       start "$@"
-}
-
 reload_service() {
        if pgrep upsmon >/dev/null 2>/dev/null; then
+               local runas=nutmon
                build_config
                /usr/sbin/upsmon -c reload
        else
@@ -227,6 +220,10 @@ reload_service() {
        fi
 }
 
+stop_service() {
+       upsmon -c stop
+}
+
 service_triggers() {
        config_load nut_monitor
        interface_triggers "add_trigger"
git clone https://git.99rst.org/PROJECT