watchcat: update to support procd
Signed-off-by: Nicholas Smith <nicholas@nbembedded.com>
(cherry picked from commit 399279b363
)
This commit is contained in:
parent
8210edd108
commit
9c94561ca0
5 changed files with 78 additions and 72 deletions
|
@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
|||
|
||||
PKG_NAME:=watchcat
|
||||
PKG_VERSION:=1
|
||||
PKG_RELEASE:=11
|
||||
PKG_RELEASE:=12
|
||||
|
||||
PKG_MAINTAINER:=Roger D <rogerdammit@gmail.com>
|
||||
PKG_LICENSE:=GPL-2.0
|
||||
|
@ -19,16 +19,16 @@ include $(INCLUDE_DIR)/package.mk
|
|||
define Package/watchcat
|
||||
SECTION:=utils
|
||||
CATEGORY:=Utilities
|
||||
TITLE:=Enable the configuration of programed reboots
|
||||
TITLE:=Enable the configuration of programmed reboots or network interface restarts
|
||||
PKGARCH:=all
|
||||
endef
|
||||
|
||||
define Package/watchcat/description
|
||||
Allows to configure a periodically reboot, or after losing internet connectivity. Configured trough UCI /etc/config/system.
|
||||
Restart network interfaces or reboot if pings to hosts fail, or set up periodic reboots. Configured via UCI /etc/config/watchcat
|
||||
endef
|
||||
|
||||
define Package/watchcat/conffiles
|
||||
/etc/config/system
|
||||
/etc/config/watchcat
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
|
@ -36,11 +36,13 @@ endef
|
|||
|
||||
define Package/watchcat/install
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_BIN) ./files/initd_watchcat $(1)/etc/init.d/watchcat
|
||||
$(INSTALL_BIN) ./files/watchcat.init $(1)/etc/init.d/watchcat
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) ./files/watchcat.sh $(1)/usr/bin/watchcat.sh
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(INSTALL_DATA) ./files/watchcat.config $(1)/etc/config/watchcat
|
||||
$(INSTALL_DIR) $(1)/etc/uci-defaults
|
||||
$(INSTALL_BIN) ./files/uci_defaults_watchcat $(1)/etc/uci-defaults/50-watchcat
|
||||
$(INSTALL_BIN) ./files/migrate-watchcat $(1)/etc/uci-defaults/migrate-watchcat
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,watchcat))
|
||||
|
|
27
utils/watchcat/files/migrate-watchcat
Normal file
27
utils/watchcat/files/migrate-watchcat
Normal file
|
@ -0,0 +1,27 @@
|
|||
#!/bin/sh
|
||||
|
||||
. /lib/functions.sh
|
||||
|
||||
upgrade_watchcat() {
|
||||
local cfg="$1"
|
||||
|
||||
config_get period "$cfg" period
|
||||
config_get mode "$cfg" mode
|
||||
config_get pinghosts "$cfg" pinghosts
|
||||
config_get forcedelay "$cfg" forcedelay
|
||||
|
||||
[ -f "/etc/config/watchcat" ] || touch /etc/config/watchcat
|
||||
uci_add watchcat watchcat
|
||||
uci_set watchcat @watchcat[-1] period "$period"
|
||||
uci_set watchcat @watchcat[-1] mode "$mode"
|
||||
uci_set watchcat @watchcat[-1] pinghosts "$pinghosts"
|
||||
uci_set watchcat @watchcat[-1] forcedelay "$forcedelay"
|
||||
|
||||
uci_remove system "$cfg"
|
||||
}
|
||||
|
||||
config_load system
|
||||
config_foreach upgrade_watchcat watchcat
|
||||
|
||||
uci_commit watchcat
|
||||
uci commit system
|
|
@ -1,10 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
uci -q show system.@watchcat[0] || {
|
||||
uci add system watchcat
|
||||
uci set system.@watchcat[0].period=6h
|
||||
uci set system.@watchcat[0].mode=ping_reboot
|
||||
uci set system.@watchcat[0].pinghosts=8.8.8.8
|
||||
uci set system.@watchcat[0].forcedelay=30
|
||||
uci commit
|
||||
}
|
5
utils/watchcat/files/watchcat.config
Normal file
5
utils/watchcat/files/watchcat.config
Normal file
|
@ -0,0 +1,5 @@
|
|||
config watchcat
|
||||
option period '6h'
|
||||
option mode 'ping_reboot'
|
||||
option pinghosts '8.8.8.8'
|
||||
option forcedelay '30'
|
|
@ -1,8 +1,9 @@
|
|||
#!/bin/sh /etc/rc.common
|
||||
|
||||
START=97
|
||||
USE_PROCD=1
|
||||
|
||||
PIDFILE="/tmp/run/watchcat"
|
||||
START=97
|
||||
STOP=01
|
||||
|
||||
append_string() {
|
||||
varname="$1"
|
||||
|
@ -29,25 +30,23 @@ time_to_seconds() {
|
|||
unset time
|
||||
}
|
||||
|
||||
load_watchcat() {
|
||||
config_watchcat() {
|
||||
# Read config
|
||||
config_get period "$1" period "120"
|
||||
config_get mode "$1" mode "restart_iface"
|
||||
config_get mode "$1" mode "ping_reboot"
|
||||
config_get pinghosts "$1" pinghosts "8.8.8.8"
|
||||
config_get pingperiod "$1" pingperiod "60"
|
||||
config_get forcedelay "$1" forcedelay "60"
|
||||
config_get pingsize "$1" pingsize "standard"
|
||||
config_get interface "$1" interface
|
||||
config_get mmifacename "$1" mmifacename
|
||||
config_get unlockbands "$1" unlockbands "0"
|
||||
config_get_bool unlockbands "$1" unlockbands "0"
|
||||
|
||||
# Fix potential typo in mode and provide backward compatibility.
|
||||
[ "$mode" = "allways" ] && mode="periodic_reboot"
|
||||
[ "$mode" = "always" ] && mode="periodic_reboot"
|
||||
[ "$mode" = "ping" ] && mode="ping_reboot"
|
||||
|
||||
error=""
|
||||
warn=""
|
||||
|
||||
|
||||
# Checks for settings common to all operation modes
|
||||
if [ "$mode" != "periodic_reboot" ] && [ "$mode" != "ping_reboot" ] && [ "$mode" != "restart_iface" ]; then
|
||||
append_string "error" "mode must be 'periodic_reboot' or 'ping_reboot' or 'restart_iface'" "; "
|
||||
|
@ -55,16 +54,14 @@ load_watchcat() {
|
|||
|
||||
period="$(time_to_seconds "$period")"
|
||||
[ "$period" -ge 1 ] ||
|
||||
append_string "error" "period has invalid format! Use time value(ex: '30'; '4m'; '6h'; '2d')" "; "
|
||||
append_string "error" "period has invalid format. Use time value(ex: '30'; '4m'; '6h'; '2d')" "; "
|
||||
|
||||
# ping_reboot mode and restart_iface mode specific checks
|
||||
if [ "$mode" = "ping_reboot" ] || [ "$mode" = "restart_iface" ]; then
|
||||
|
||||
if [ -z "$error" ]; then
|
||||
|
||||
pingperiod_default="$((period / 5))"
|
||||
|
||||
pingperiod="$(time_to_seconds "$pingperiod")"
|
||||
|
||||
if [ "$pingperiod" -ge 0 ] && [ "$pingperiod" -ge "$period" ]; then
|
||||
pingperiod="$(time_to_seconds "$pingperiod_default")"
|
||||
append_string "warn" "pingperiod cannot be greater than $period. Defaulted to $pingperiod_default seconds (1/5 of period)" "; "
|
||||
|
@ -90,53 +87,38 @@ load_watchcat() {
|
|||
logger -p user.err -t "watchcat" "reboot program $1 not started - $error"
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
# Need to conditionally run mode functions because they have different signatures
|
||||
case "$mode" in
|
||||
periodic_reboot)
|
||||
/usr/bin/watchcat.sh "periodic_reboot" "$period" "$forcedelay" &
|
||||
logger -p user.info -t "watchcat" "started task (mode=$mode;period=$period;forcedelay=$forcedelay)"
|
||||
;;
|
||||
ping_reboot)
|
||||
/usr/bin/watchcat.sh "ping_reboot" "$period" "$forcedelay" "$pinghosts" "$pingperiod" "$pingsize" &
|
||||
logger -p user.info -t "watchcat" "started task (mode=$mode;period=$period;pinghosts=$pinghosts;pingperiod=$pingperiod;forcedelay=$forcedelay;pingsize=$pingsize)"
|
||||
;;
|
||||
restart_iface)
|
||||
/usr/bin/watchcat.sh "restart_iface" "$period" "$pinghosts" "$pingperiod" "$pingsize" "$interface" "$mmifacename" &
|
||||
logger -p user.info -t "watchcat" "started task (mode=$mode;period=$period;pinghosts=$pinghosts;pingperiod=$pingperiod;pingsize=$pingsize;interface=$interface;mmifacename=$mmifacename;unlockbands=$unlockbands)"
|
||||
;;
|
||||
*)
|
||||
echo "Error starting Watchcat service. Invalid mode selection: $mode"
|
||||
;;
|
||||
periodic_reboot)
|
||||
procd_open_instance "watchcat_${1}"
|
||||
procd_set_param command /usr/bin/watchcat.sh "periodic_reboot" "$period" "$forcedelay"
|
||||
procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
|
||||
procd_close_instance
|
||||
;;
|
||||
ping_reboot)
|
||||
procd_open_instance "watchcat_${1}"
|
||||
procd_set_param command /usr/bin/watchcat.sh "ping_reboot" "$period" "$forcedelay" "$pinghosts" "$pingperiod" "$pingsize"
|
||||
procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
|
||||
procd_close_instance
|
||||
;;
|
||||
restart_iface)
|
||||
procd_open_instance "watchcat_${1}"
|
||||
procd_set_param command /usr/bin/watchcat.sh "restart_iface" "$period" "$pinghosts" "$pingperiod" "$pingsize" "$interface" "$mmifacename"
|
||||
procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
|
||||
procd_close_instance
|
||||
;;
|
||||
*)
|
||||
echo "Error starting Watchcat service. Invalid mode selection: $mode"
|
||||
;;
|
||||
esac
|
||||
|
||||
echo $! >>"${PIDFILE}.pids"
|
||||
}
|
||||
|
||||
stop() {
|
||||
if [ -f "${PIDFILE}.pids" ]; then
|
||||
logger -p user.info -t "watchcat" "stopping all tasks"
|
||||
|
||||
while read pid; do
|
||||
kill -KILL "$pid"
|
||||
done <"${PIDFILE}.pids"
|
||||
|
||||
rm "${PIDFILE}.pids"
|
||||
|
||||
logger -p user.info -t "watchcat" "all tasks stopped"
|
||||
else
|
||||
logger -p user.info -t "watchcat" "no tasks running"
|
||||
fi
|
||||
start_service() {
|
||||
config_load watchcat
|
||||
config_foreach config_watchcat watchcat
|
||||
}
|
||||
|
||||
start() {
|
||||
[ -f "${PIDFILE}.pids" ] && stop
|
||||
|
||||
config_load system
|
||||
if [ -n "$(uci show system.@watchcat[0])" ]; then # at least one watchcat section exists
|
||||
logger -p user.info -t "watchcat" "starting all tasks"
|
||||
config_foreach load_watchcat watchcat
|
||||
logger -p user.info -t "watchcat" "all tasks started"
|
||||
else
|
||||
logger -p user.info -t "watchcat" "no tasks defined"
|
||||
fi
|
||||
service_triggers() {
|
||||
procd_add_reload_trigger "watchcat"
|
||||
}
|
Loading…
Reference in a new issue