]> git.proxmox.com Git - mirror_frr.git/blobdiff - tools/frrinit.sh.in
Merge pull request #5381 from donaldsharp/zebra_100_is_no_good
[mirror_frr.git] / tools / frrinit.sh.in
index 0f5ed85864e71002df40e1801b919e37bd8fc4de..423d6b9b1de6a09706b52f551a5519c1188857c8 100644 (file)
@@ -71,6 +71,16 @@ reload)
                exit 1
        fi
 
+       # systemd doesn't set WATCHDOG_USEC for reload commands.
+       watchfrr_pidfile="$V_PATH/watchfrr.pid"
+       watchfrr_pid="`cat \"$watchfrr_pidfile\"`"
+       if [ -d "/proc/$watchfrr_pid" ]; then
+               wdt="`tr '\0' '\n' < /proc/$watchfrr_pid/environ | grep '^WATCHDOG_USEC='`"
+               wdt="${wdt#WATCHDOG_USEC=}"
+               [ -n "$wdt" ] && : ${WATCHDOG_USEC:=$wdt}
+               [ -n "$WATCHDOG_USEC" ] && export WATCHDOG_USEC
+       fi
+
        # restart watchfrr to pick up added daemons.
        # NB: This will NOT cause the other daemons to be restarted.
        daemon_list daemons
@@ -78,6 +88,21 @@ reload)
        daemon_stop watchfrr && \
                daemon_start watchfrr
 
+       # make systemd not kill watchfrr after ExecReload completes
+       # 3 goats were sacrificed to restore sanity after coding this
+       watchfrr_pid="`cat \"$watchfrr_pidfile\"`"
+       if [ -f "/proc/$watchfrr_pid/cgroup" -a -d "/sys/fs/cgroup/systemd" ]; then
+               cg="`egrep '^[0-9]+:name=systemd:' \"/proc/$watchfrr_pid/cgroup\"`"
+               cg="${cg#*:*:}"
+
+               cgmain="$cg"
+               cgmain="${cgmain%/.control}"
+               cgmain="${cgmain%/control}"
+
+               [ -n "$cg" -a "$cg" != "$cgmain" ] && \
+                       echo "$watchfrr_pid" > "/sys/fs/cgroup/systemd/$cgmain/tasks"
+       fi
+
        NEW_CONFIG_FILE="${2:-$C_PATH/frr.conf}"
        [ ! -r $NEW_CONFIG_FILE ] && log_failure_msg "Unable to read new configuration file $NEW_CONFIG_FILE" && exit 1
        "$RELOAD_SCRIPT" --reload "$NEW_CONFIG_FILE"