# Get service config
[ -f /etc/sysconfig/squid ] && . /etc/sysconfig/squid
-# Set default shutdown timeout if it is not set in service config
-SQUID_SHUTDOWN_TIMEOUT=${SQUID_SHUTDOWN_TIMEOUT:-60}
-
# Check that networking is up.
if is_yes "${NETWORKING}"; then
if [ ! -f /var/lock/subsys/network -a "$1" != stop -a "$1" != status -a "$1" != init ]; then
exit 0
fi
+# Set default shutdown timeout if it is not set in service config
+SQUID_SHUTDOWN_TIMEOUT=${SQUID_SHUTDOWN_TIMEOUT:-60}
+
+# determine which one is the cache_swap directory
+CACHE_SWAP=$(awk '/^cache_dir/{print $3}' /etc/squid/squid.conf)
+[ -z "$CACHE_SWAP" ] && CACHE_SWAP=/var/cache/squid
+
+check_cache_dirs() {
+ local need_init=0 dir
+ for dir in $CACHE_SWAP; do
+ if [ ! -d $dir/00 ]; then
+ need_init=1
+ fi
+ done
+ if [ $need_init = 1 ]; then
+ show "Initializing Squid cache dirs"
+ squid -z -F -D >> /var/log/squid/squid.out 2>&1 && ok || fail
+ fi
+}
+
start() {
# Check if the service is already running?
if [ ! -f /var/lock/subsys/squid ]; then
+ check_cache_dirs
msg_starting Squid
- daemon squid $SQUID_OPTS
+ daemon /usr/sbin/squid $SQUID_OPTS
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/squid
else
if [ -f /var/lock/subsys/squid ]; then
# Stop daemons.
msg_stopping Squid
- if [ -f /var/run/squid.pid ]; then
- PID=$(filter_chroot `cat /var/run/squid.pid`)
- if [ -z "$PID" ]; then
- PID=0
- fi
- else
- PID=0
- fi
killproc squid
- RETVAL=$?
- if [ ! $PID -eq 0 ]; then
+
+ if [ -f /var/run/squid.pid ]; then
show "Waiting for Squid to stop"
busy
+
timeout=0
- while ps -U squid -o user | grep -q ^squid
- do
+ while : ; do
+ [ ! -f /var/run/squid.pid ] || break
if [ $timeout -ge $SQUID_SHUTDOWN_TIMEOUT ]; then
- break
+ RETVAL=1
+ break
fi
- sleep 1
+ sleep 1 && echo -n "."
timeout=$((timeout+1))
done
ok
fi
+
rm -f /var/lock/subsys/squid >/dev/null 2>&1
else
msg_not_running Squid
fi
}
-RETVAL=0
-# See how we were called.
-case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- restart)
- stop
- start
- ;;
- reload|force-reload)
+# check that squid config is ok
+configtest() {
+ show "Checking squid config syntax"
+ squid -k parse >> /var/log/squid/squid.out 2>&1
+ RETVAL=$?
+ [ $RETVAL = 0 ] && ok || fail
+}
+
+reload() {
if [ -f /var/lock/subsys/squid ]; then
msg_reloading Squid
busy
[ $RETVAL -ne 0 ] && RETVAL=7
[ $RETVAL -eq 0 ] && ok || fail
else
- msg_not_running Squid >&2
+ msg_not_running Squid
exit 7
fi
+}
+
+restart() {
+ # if service is up, do configtest
+ if [ -f /var/lock/subsys/squid ]; then
+ configtest
+ if [ $RETVAL != 0 ]; then
+ exit 1
+ fi
+ fi
+ stop
+ start
+}
+
+condrestart() {
+ # if service is up, do configtest
+ if [ -f /var/lock/subsys/squid ]; then
+ configtest
+ if [ $RETVAL != 0 ]; then
+ exit 1
+ fi
+ stop
+ start
+ else
+ msg_not_running Squid
+ RETVAL=0
+ fi
+}
+
+RETVAL=0
+# See how we were called.
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ restart)
+ restart
+ ;;
+ try-restart)
+ condrestart
+ ;;
+ reload|force-reload)
+ reload
;;
status)
status squid
exit $?
;;
init)
- nls "Initializing %s" squid
- squid -z
+ show "Initializing Squid"; echo
+ check_cache_dirs
;;
*)
- msg_usage "$0 {start|stop|init|restart|reload|force-reload|status}"
+ msg_usage "$0 {start|stop|init|restart|try-restart|reload|force-reload|status}"
exit 3
esac