read pids into an array in case of multiple instances of FTL running. Wait til they are all closed (stop calls killall) and then start another one

Additionally, move the logic from start() into the end of restart(), and have start() call restart, ensures multiple calls of start cannot start multple processes

Signed-off-by: Adam Warner <me@adamwarner.co.uk>
This commit is contained in:
Adam Warner 2022-04-11 20:59:07 +01:00
parent 509ca4b39a
commit b0878f1750
No known key found for this signature in database
GPG Key ID: 872950F3ECF2B173
1 changed files with 11 additions and 8 deletions

View File

@ -1,8 +1,9 @@
#!/bin/bash
# This script patches all service commands into the appropriate s6- commands
# pi-hole upstream scripts need a 'service' interface. why not systemd? docker said so.
start() {
s6-svc -wu -u -T2500 /var/run/s6/services/$service
restart
}
stop() {
@ -12,16 +13,18 @@ stop() {
restart() {
local pid
# Get the PID of the service we are asking to restart
pid=$(pgrep $service)
# Get the PID(s) of the service we are asking to restart
mapfile -t pids < <(pgrep $service)
# Only attempt to stop the service if it is already running
if [ -n "$pid" ]; then
if [ "${#pids[@]}" -gt 0 ]; then
stop
# Loop until we are certain that the process has been stopped
while test -d /proc/$pid; do
sleep 0.2
for pid in "${pids[@]}"; do
# Loop until we are certain that the process has been stopped
while test -d /proc/$pid; do
sleep 0.2
done
done
fi
@ -30,7 +33,7 @@ restart() {
# Only attempt to start the service if it is not already running
if [ -z "$pid" ]; then
start
s6-svc -wu -u -T2500 /var/run/s6/services/$service
fi
}