watchcat: add support to run a script
[feed/packages.git] / utils / watchcat / files / watchcat.init
index ba047f31fd97365104d7dfbdaa0fe1e4a0b2faee..688b44bb8cf444f70eda6900282119601711be88 100644 (file)
@@ -42,6 +42,7 @@ config_watchcat() {
        config_get mmifacename "$1" mmifacename
        config_get_bool unlockbands "$1" unlockbands "0"
        config_get addressfamily "$1" addressfamily "any"
+       config_get script "$1" script
 
        # Fix potential typo in mode and provide backward compatibility.
        [ "$mode" = "allways" ] && mode="periodic_reboot"
@@ -49,8 +50,8 @@ config_watchcat() {
        [ "$mode" = "ping" ] && mode="ping_reboot"
 
        # 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'" "; "
+       if [ "$mode" != "periodic_reboot" ] && [ "$mode" != "ping_reboot" ] && [ "$mode" != "restart_iface" ] && [ "$mode" != "run_script" ]; then
+               append_string "error" "mode must be 'periodic_reboot' or 'ping_reboot' or 'restart_iface' or 'run_script'" "; "
        fi
 
        period="$(time_to_seconds "$period")"
@@ -58,7 +59,7 @@ config_watchcat() {
                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 [ "$mode" = "ping_reboot" ] || [ "$mode" = "restart_iface" ] || [ "$mode" = "run_script" ]; then
                if [ -z "$error" ]; then
                        pingperiod_default="$((period / 5))"
                        pingperiod="$(time_to_seconds "$pingperiod")"
@@ -78,6 +79,10 @@ config_watchcat() {
                fi
        fi
 
+       if [ "$mode" = "run_script" ] && [ -z "$script" ]; then
+               append_string "error" "run_script mode requires a script"
+       fi
+
        # ping_reboot mode and periodic_reboot mode specific checks
        if [ "$mode" = "ping_reboot" ] || [ "$mode" = "periodic_reboot" ]; then
                forcedelay="$(time_to_seconds "$forcedelay")"
@@ -109,6 +114,12 @@ config_watchcat() {
                procd_set_param respawn "${respawn_threshold:-3600}" "${respawn_timeout:-5}" "${respawn_retry:-5}"
                procd_close_instance
                ;;
+       run_script)
+               procd_open_instance "watchcat_${1}"
+               procd_set_param command /usr/bin/watchcat.sh "run_script" "$period" "$pinghosts" "$pingperiod" "$pingsize" "$interface" "$addressfamily" "$script"
+               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"
                ;;