#!/bin/bash IF=$1 STATUS=$2 function status_knockd() { regexp="active \(([a-z]+)\)" status=$(systemctl status knockd) [[ $status =~ $regexp ]] match="${BASH_REMATCH[1]}" if [ ${match} == "exited" ]; then # active (exited) echo "e" elif [ ${match} == "running" ]; then # active (running) echo "r" else # inactive (dead) echo "x" fi } function start_knockd() { result=$(knockd_status) case "$result" in e) systemctl stop knockd systemctl start knockd ;; r) ;; *) systemctl start knockd ;; esac } function stop_knockd() { result=$(knockd_status) case "$result" in x) ;; *) systemctl stop knockd ;; esac } if [ "$IF" == "wlan0" ] then case "$2" in up) logger -s "NM-knockd: 'up' triggered: starting knockd" start_knockd ;; down) logger -s "NM-knockd: 'down' triggered: stopping knockd" stop_knockd ;; *) ;; esac fi