These changes are mainly meant for upcoming squid 3.5.xx,
but should still work with 3.4.xx:
- Raised 'while-loop'-time for stopping squid to 360 seconds,
even bigger caches should get a chance. ;-)
- Changed the 'while-loop' from using 'statusproc' to 'squid -k check',
since 'statusproc' didn't find the still running '(squid-1)'-process.
Thus, 'squid' hadn't enough time to close the index. This led to a
damaged 'swap.state'-file and "Rebuilding storage in /var/log/cache"
always ended with "(dirty log)".
- Process detection for leftover '(squid-1)'-process uses 'pgrep'.
- Cosmetic changes to some 'boot_mesg' lines. Added a few.
- Changed the 'flush'-command to delete the entire '/var/log/cache'-structure,
it will automatically be rebuild during the next start.
Best,
Matthias
Signed-off-by: Matthias Fischer <matthias.fischer(a)ipfire.org>
---
src/initscripts/init.d/squid | 43 ++++++++++++++++++++++++++++---------------
1 file changed, 28 insertions(+), 15 deletions(-)
diff --git a/src/initscripts/init.d/squid b/src/initscripts/init.d/squid
index abed90a..47bf182 100644
--- a/src/initscripts/init.d/squid
+++ b/src/initscripts/init.d/squid
@@ -94,8 +94,9 @@ case "$1" in
stop)
iptables -t nat -F SQUID
if [ -e /var/run/squid.pid ]; then
- boot_mesg "Stopping Squid Proxy Server..."
- squid -k shutdown >/dev/null 2>&1
+ boot_mesg -n "Shutting down Squid Proxy Server...\n"
+ boot_mesg "(this may take up to a few minutes)."
+ /usr/sbin/squid -k shutdown >/dev/null 2>&1
evaluate_retval
# Stop squidGuard, updxlrator, squidclamav
@@ -108,22 +109,35 @@ case "$1" in
# 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
-
- while [ ${counter} -gt 0 ]; do
- statusproc /usr/sbin/squid >/dev/null && break;
+ # If some squid processes are still running, wait up to 360 seconds
+ # before we go on to kill all and delete entire cache structure.
+ n=0
+ while [ /usr/sbin/squid -k check > /dev/null 2>&1 ] && [ $n -lt 360 ]; do
sleep 1
- counter=$(( ${counter} - 1))
+ n=$(( ${n} + 1 ))
done
- # Kill squid service, if still running.
- killproc /usr/sbin/squid >/dev/null
+ # If (squid-1) is still running after 360 seconds,
+ # kill all squid processes and delete damaged cache structure.
+ if ( pgrep -fl "(squid-1)" > /dev/null 2>&1 ); then
+ killproc /usr/sbin/squid >/dev/null
+ rm -rf /var/log/cache/*
+ boot_mesg -n "You should not be reading this warning.\n"
+ boot_mesg -n "Some squid-processes had to be killed after 360 seconds,\n"
+ boot_mesg -n "so index file and cache contents had to be deleted.\n"
+ boot_mesg -n "Therefore, the complete cache structure will be rebuild\n"
+ boot_mesg "during next start."
+ echo_warning
+ else
+ boot_mesg "All squid processes exited normally."
+ echo_ok
+ boot_mesg ""
+ fi
+ fi
- # Trash remain pid file from squid.
+ # Delete remaining pid file from squid if it still exists.
rm -rf /var/run/squid.pid
- fi
+
;;
restart)
@@ -143,8 +157,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
;;
--
2.8.2