nut: Fix upsmon init actions

1) For upsmon start and stop were at wrong position in rc.d
2) Stop needs more than just killing the procd instead but rather
needs a  stop command to be issued.
3) Interface up/down was causing not to enter a crashloop (we fix this
with procd trigger on interface changes).

Signed-off-by: Daniel F. Dickinson <cshored@thecshore.com>
This commit is contained in:
Daniel F. Dickinson
2019-08-26 23:43:16 -04:00
parent d06bd2d7e3
commit c963f0c297
+39 -7
View File
@@ -1,6 +1,7 @@
#!/bin/sh /etc/rc.common #!/bin/sh /etc/rc.common
START=51 START=82
STOP=28
USE_PROCD=1 USE_PROCD=1
UPSMON_C=/var/etc/nut/upsmon.conf UPSMON_C=/var/etc/nut/upsmon.conf
@@ -162,6 +163,32 @@ build_config() {
[ -s "$UPSMON_C" ] && chgrp $(id -gn ${runas:-root}) "$UPSMON_C" [ -s "$UPSMON_C" ] && chgrp $(id -gn ${runas:-root}) "$UPSMON_C"
} }
interface_triggers() {
local action="$1"
local triggerlist trigger
config_get triggerlist "upsmon" triggerlist
. "${IPKG_INSTROOT}"/lib/functions/network.sh
if [ -n "$triggerlist" ]; then
for trigger in $triggerlist; do
if [ "$action" = "add_trigger" ]; then
procd_add_interface_trigger "interface.*" "$trigger" /etc/init.d/nut-monitor restart
else
network_is_up "$trigger" && return 0
fi
done
else
if [ "$action" = "add_trigger" ]; then
procd_add_raw_trigger "interface.*.up" 2000 /etc/init.d/nut-monitor restart
else
ubus call network.device status | grep -q '"up": true' && return 0
fi
fi
[ "$action" = "add_trigger" ] || return 1
}
start_service() { start_service() {
local runas local runas
local havemon havems local havemon havems
@@ -169,11 +196,12 @@ start_service() {
[ "$havemon" != 1 ] && return [ "$havemon" != 1 ] && return
[ "$havems" != 1 ] && return [ "$havems" != 1 ] && return
interface_triggers "check_interface_up" || return 0
procd_open_instance "upsmon" procd_open_instance "upsmon"
procd_set_param respawn procd_set_param respawn 10 20 6
procd_set_param stderr 0 procd_set_param stderr 1
procd_set_param stdout 1 procd_set_param stdout 0
procd_set_param command /usr/sbin/upsmon -D procd_set_param command /usr/sbin/upsmon -D
procd_close_instance procd_close_instance
} }
@@ -184,12 +212,16 @@ reload_service() {
build_config build_config
/usr/sbin/upsmon -c reload /usr/sbin/upsmon -c reload
else else
stop restart
sleep 2
start_service
fi fi
} }
stop_service() {
upsmon -c stop
}
service_triggers() { service_triggers() {
config_load nut_monitor
interface_triggers "add_trigger"
procd_add_reload_trigger "nut_monitor" procd_add_reload_trigger "nut_monitor"
} }