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>
(cherry picked from commit 507caef3dd
)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
This commit is contained in:
parent
74c55729b0
commit
b89394cb62
@ -307,7 +307,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 Upstream
|
package/dmalloc/0005-configure-use-LD-instead-of-hard-coding-ld.patch Upstream
|
||||||
package/dmraid/0001-fix-compilation-under-musl.patch Upstream
|
package/dmraid/0001-fix-compilation-under-musl.patch Upstream
|
||||||
package/dmraid/S20dmraid Variables
|
package/dmraid/S20dmraid Variables
|
||||||
package/dnsmasq/S80dnsmasq Shellcheck
|
|
||||||
package/docker-engine/S60dockerd Indent Shellcheck Variables
|
package/docker-engine/S60dockerd Indent Shellcheck Variables
|
||||||
package/docopt-cpp/0001-only-build-one-target-use-BUILD_SHARED_LIBS-where-appropriate.patch Upstream
|
package/docopt-cpp/0001-only-build-one-target-use-BUILD_SHARED_LIBS-where-appropriate.patch Upstream
|
||||||
package/domoticz/S99domoticz Shellcheck
|
package/domoticz/S99domoticz Shellcheck
|
||||||
|
@ -10,12 +10,21 @@ case "$1" in
|
|||||||
printf "Starting dnsmasq: "
|
printf "Starting dnsmasq: "
|
||||||
start-stop-daemon -S -p "$PIDFILE" -x "/usr/sbin/$DAEMON" -- \
|
start-stop-daemon -S -p "$PIDFILE" -x "/usr/sbin/$DAEMON" -- \
|
||||||
--pid-file="$PIDFILE"
|
--pid-file="$PIDFILE"
|
||||||
|
# shellcheck disable=SC2181
|
||||||
[ $? = 0 ] && echo "OK" || echo "FAIL"
|
[ $? = 0 ] && echo "OK" || echo "FAIL"
|
||||||
;;
|
;;
|
||||||
stop)
|
stop)
|
||||||
printf "Stopping dnsmasq: "
|
printf "Stopping dnsmasq: "
|
||||||
start-stop-daemon -K -q -p "$PIDFILE" -x "/usr/sbin/$DAEMON"
|
start-stop-daemon -K -q -p "$PIDFILE" -x "/usr/sbin/$DAEMON"
|
||||||
|
# shellcheck disable=SC2181
|
||||||
[ $? = 0 ] && echo "OK" || echo "FAIL"
|
[ $? = 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)
|
restart|reload)
|
||||||
$0 stop
|
$0 stop
|
||||||
|
Loading…
Reference in New Issue
Block a user