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>
}
build_config() {
- local runas=nutmon
mkdir -m 0750 -p "$(dirname "$UPSMON_C")"
config_load nut_monitor
}
start_service() {
+ local runas=nutmon
local havemon havems
build_config
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
fi
}
+stop_service() {
+ upsmon -c stop
+}
+
service_triggers() {
config_load nut_monitor
interface_triggers "add_trigger"