net/mwan3: remove pid file use pgrep to get pid
authorFlorian Eckert <fe@dev.tdt.de>
Mon, 8 May 2017 09:43:27 +0000 (11:43 +0200)
committerFlorian Eckert <fe@dev.tdt.de>
Fri, 12 May 2017 13:28:12 +0000 (15:28 +0200)
If mwan3track will not stop immediately after sending the kill signal,
the clean_up handler will delete the pid file later while the new mwan3track is
already running.

This could result in a situation that mwan3track is running
more then once because the old mwan3track service could not be killed,
because the pid file is missing.

Using pgrep to kill all mwan3track for the tracked interface and not using
pid file should fix this issue.

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
net/mwan3/files/lib/mwan3/mwan3.sh
net/mwan3/files/usr/libexec/rpcd/mwan3
net/mwan3/files/usr/sbin/mwan3
net/mwan3/files/usr/sbin/mwan3track

index f0ebcc42e1bfed194c765c017fcbc9aa378152a0..561aaede6d1d5f6005f4012c9179ef90edd27416 100644 (file)
@@ -390,10 +390,7 @@ mwan3_track()
        }
        config_list_foreach $1 track_ip mwan3_list_track_ips
 
-       if [ -e /var/run/mwan3track-$1.pid ] ; then
-               kill $(cat /var/run/mwan3track-$1.pid) &> /dev/null
-       fi
-
+       kill $(pgrep -f "mwan3track $1") &> /dev/null
        if [ -n "$track_ips" ]; then
                [ -x /usr/sbin/mwan3track ] && /usr/sbin/mwan3track $1 $2 $track_ips &
        fi
@@ -401,18 +398,13 @@ mwan3_track()
 
 mwan3_track_signal()
 {
-       local pid status
+       local pid
 
-       if [ -f "/var/run/mwan3track-${1}.pid" ]; then
-               pid="$(cat "/var/run/mwan3track-${1}.pid")"
-               status="$(pgrep -f mwan3track | grep "${pid}")"
-               if [ "${status}" != "" ]; then
-                       kill -USR1 "${pid}"
-               else
-                       $LOG warn "Unable to send signal USR1 to mwan3track on interface $1 with pid ${pid}"
-               fi
+       pid="$(pgrep -f "mwan3track $1")"
+       if [ "${pid}" != "" ]; then
+               kill -USR1 "${pid}"
        else
-               $LOG warn "Unable to find \"/var/run/mwan3track-${1}.pid\" file for mwan3track on interface $1"
+               $LOG warn "Unable to send signal USR1 to mwan3track on interface $1 with pid ${pid}"
        fi
 }
 
index 028dafe1db8ca63f829b7e3bb0f0d5af79eb8b34..2b80460689e4c6368b60d4d296f0d0fd19016712 100755 (executable)
@@ -34,16 +34,12 @@ get_mwan3_status() {
        local iface="${1}"
        local iface_select="${2}"
        local running="0"
-       local pid=""
-       local status=""
+       local pid
 
        if [ "${iface}" = "${iface_select}" ] || [ "${iface_select}" = "" ]; then
-               if [ -f "${MWAN3_PID_FILE}-${iface}.pid" ]; then
-                       pid="$(cat "${MWAN3_PID_FILE}-${iface}.pid")"
-                       status="$(pgrep -f mwan3track | grep "${pid}")"
-                       if [ "${status}" != "" ]; then
-                               running="1"
-                       fi
+               pid="$(pgrep -f "mwan3track $iface_selected")"
+               if [ "${pid}" != "" ]; then
+                       running="1"
                fi
 
                json_add_object "${iface}"
index 63617316cb2d8ed6b92ee7b732981787f6e45f5b..10dc86f8f5657689c7ad3f15a889f9ba16f6b9e4 100755 (executable)
@@ -42,9 +42,7 @@ ifdown()
 
        ACTION=ifdown INTERFACE=$1 /sbin/hotplug-call iface
 
-       if [ -e /var/run/mwan3track-$1.pid ] ; then
-               kill $(cat /var/run/mwan3track-$1.pid)
-       fi
+       kill $(pgrep -f "mwan3track $1") &> /dev/null
 }
 
 ifup()
index 0d7b5ab5d9cf43e70871b65568b054d33e5b4b11..58a31f0cab173644306299b193997365081cd3b0 100755 (executable)
@@ -10,8 +10,9 @@ IFDOWN_EVENT=0
 
 clean_up() {
        $LOG notice "Stopping mwan3track for interface \"${INTERFACE}\""
-       rm "/var/run/mwan3track-${INTERFACE}.pid" &> /dev/null
-       rm -rf "/var/run/mwan3track/${INTERFACE}" &> /dev/null
+       if [ "$(pgrep -f "mwan3track ${INTERFACE}")" = "" ]; then
+               rm -rf "/var/run/mwan3track/${INTERFACE}" &> /dev/null
+       fi
        if [ -z "$(ls -A "/var/run/mwan3track")" ]; then
                rm -rf "/var/run/mwan3track"
        fi
@@ -31,7 +32,6 @@ main() {
 
        INTERFACE=$1
        DEVICE=$2
-       echo "$$" > /var/run/mwan3track-$1.pid
        mkdir -p /var/run/mwan3track/$1
        trap clean_up SIGINT SIGTERM
        trap if_down SIGUSR1
@@ -103,7 +103,6 @@ main() {
                        if [ $score -eq $up ]; then
                                $LOG notice "Interface $1 ($2) is online"
                                env -i ACTION=ifup INTERFACE=$1 DEVICE=$2 /sbin/hotplug-call iface
-                               rm /var/run/mwan3track-$1.pid
                                rm -rf "/var/run/mwan3track/${1}" &> /dev/null
                                exit 0
                        fi