]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/commitdiff
squid: Rework initscript
authorMatthias Fischer <matthias.fischer@ipfire.org>
Tue, 17 May 2016 19:33:24 +0000 (21:33 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 18 May 2016 15:12:13 +0000 (16:12 +0100)
The initscript now takes care that the squid proxy server process
is properly shut down. If that fails, it will remove the cache
index and let it be recreated at the next start. A warning is
shown to the user.

The "flush" command will now remove the entire proxy cache.

Signed-off-by: Matthias Fischer <matthias.fischer@ipfire.org>
Signed-off-by: Arne Fitzenreiter <arne.fitzenreiter@ipfire.org>
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/initscripts/init.d/squid

index abed90aef653569737edf06ca1ee3786e0a68307..ade9101a681027a5cc8fbae5678619095669f188 100644 (file)
@@ -94,9 +94,8 @@ case "$1" in
        stop)
                        iptables -t nat -F SQUID
                if [ -e /var/run/squid.pid ]; then
-                       boot_mesg "Stopping Squid Proxy Server..."
+                       boot_mesg -n "Stopping Squid Proxy Server (this may take up to a few minutes)..."
                        squid -k shutdown >/dev/null 2>&1
-                       evaluate_retval
 
                        # Stop squidGuard, updxlrator, squidclamav
                        # and redirect_wrappers.
@@ -105,25 +104,42 @@ case "$1" in
                        killproc /usr/bin/squidclamav >/dev/null &
                        killproc /usr/sbin/redirect_wrapper >/dev/null &
 
-                       # Wait until all redirectors have been stopped.
-                       wait
-
-                       # If squid is still running, wait up to 30 seconds
-                       # before we go on to kill it.
-                       counter=30
+                       # If some squid processes are still running, wait up to 360 seconds
+                       # before we go on to kill the remaining process(es) and delete damaged
+                       # '/var/log/cache/swap.state'.
+                       n=0
+                       while squid -k check &>/dev/null && [ $n -lt 360 ]; do
+                               # Print a dot every 6 seconds
+                               [ $(( ${n} % 6 )) -eq 0 ] && boot_mesg -n .
 
-                       while [ ${counter} -gt 0 ]; do
-                               statusproc /usr/sbin/squid >/dev/null && break;
+                               n=$(( ${n} + 1 ))
                                sleep 1
-                               counter=$(( ${counter} - 1))
                        done
-
-                       # Kill squid service, if still running.
-                       killproc /usr/sbin/squid >/dev/null
-
-                       # Trash remain pid file from squid.
-                       rm -rf /var/run/squid.pid
+                       boot_mesg "" # end line
+
+                       # If (squid-1) is still running, kill all squid processes
+                       if squid -k check &>/dev/null || pgrep -fl "(squid-1)" >/dev/null 2>&1; then
+                               killproc /usr/sbin/squid >/dev/null
+                               echo_failure
+
+                               # Remove damaged journal of cache index
+                               rm -f /var/log/cache/swap.state
+
+                               boot_mesg -n "WARNING: squid could not be gracefully shut down." ${WARNING}
+                               boot_mesg -n " The cache index was damaged and has been removed."
+                               boot_mesg -n " The cache data has not been lost and the index will be"
+                               boot_mesg -n " recreated at the next start."
+                               boot_mesg "" ${NORMAL}
+                               echo_warning
+                       else
+                               logger -t squid "squid shutdown time: ${n} seconds"
+
+                               echo_ok
+                       fi
                fi
+
+               # Trash remain pid file from squid.
+               rm -f /var/run/squid.pid
                ;;
 
        restart)
@@ -143,8 +159,7 @@ case "$1" in
 
        flush)
                $0 stop
-               echo > /var/log/cache/swap.state
-               chown squid.squid /var/log/cache/swap.state
+               rm -rf /var/log/cache/*
                sleep 1
                $0 start
                ;;