package/dnsmasq: Fix init script restart command
Restarting dnsmasq can cause constant issues: stop works, but start fails because the new instance can't bind the socket. Another restart immediately after works just fine: # /etc/init.d/S80dnsmasq restart Stopping dnsmasq: OK Starting dnsmasq: dnsmasq: failed to create listening socket for 192.168.128.1: Address in use FAIL # /etc/init.d/S80dnsmasq restart Stopping dnsmasq: FAIL Starting dnsmasq: OK Solve this by waiting for process to actually stop before returning from the stop command. Clean up the PID file after to avoid potential issues with the PID being reused after stop. The wait could also be placed inside the restart block, but putting it into the stop block has the advantage that it also avoids similar issues for any other callers. Signed-off-by: Fiona Klute <fiona.klute+wiwa@gmx.de> [yann.morin.1998@free.fr: - fix shellcheck - reflow commit log ] Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
This commit is contained in:
parent
707318c08b
commit
507caef3dd
@ -552,7 +552,6 @@ package/dmalloc/0004-Makefile-use-the-configure-detected-or-user-supplied.patch
|
||||
package/dmalloc/0005-configure-use-LD-instead-of-hard-coding-ld.patch lib_patch.Upstream
|
||||
package/dmraid/0001-fix-compilation-under-musl.patch lib_patch.Upstream
|
||||
package/dmraid/S20dmraid lib_sysv.Variables
|
||||
package/dnsmasq/S80dnsmasq Shellcheck
|
||||
package/docker-engine/S60dockerd Shellcheck lib_sysv.Indent lib_sysv.Variables
|
||||
package/docopt-cpp/0001-only-build-one-target-use-BUILD_SHARED_LIBS-where-appropriate.patch lib_patch.Upstream
|
||||
package/domoticz/S99domoticz Shellcheck
|
||||
|
@ -10,12 +10,21 @@ case "$1" in
|
||||
printf "Starting dnsmasq: "
|
||||
start-stop-daemon -S -p "$PIDFILE" -x "/usr/sbin/$DAEMON" -- \
|
||||
--pid-file="$PIDFILE"
|
||||
# shellcheck disable=SC2181
|
||||
[ $? = 0 ] && echo "OK" || echo "FAIL"
|
||||
;;
|
||||
stop)
|
||||
printf "Stopping dnsmasq: "
|
||||
start-stop-daemon -K -q -p "$PIDFILE" -x "/usr/sbin/$DAEMON"
|
||||
# shellcheck disable=SC2181
|
||||
[ $? = 0 ] && echo "OK" || echo "FAIL"
|
||||
# wait for dnsmasq process to be gone
|
||||
while true; do
|
||||
pid="$( cat "${PIDFILE}" 2>/dev/null || true )"
|
||||
{ [ -n "${pid}" ] && [ -d "/proc/${pid}" ]; } || break
|
||||
sleep 0.1
|
||||
done
|
||||
rm -f "$PIDFILE"
|
||||
;;
|
||||
restart|reload)
|
||||
$0 stop
|
||||
|
Loading…
Reference in New Issue
Block a user