blob: 488a45b527a97ee21c3bd212572d37aeea7d2b37 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
#!/sbin/runscript
# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/net-proxy/squid/files/squid.initd,v 1.14 2011/10/23 18:45:39 polynomial-c Exp $
extra_started_commands="reload rotate"
depend() {
use dns
need net
after firewall
}
upprocval() {
[ -f $1 ] || return 0
if [ `cat $1` -lt $2 ]; then
echo $2 > $1
fi
}
# Try to increase the # of filedescriptors we can open.
maxfds() {
[ -n "$SQUID_MAXFD" ] || return
[ $SQUID_MAXFD -le 8192 ] || SQUID_MAXFD=8192
local minimal_file_max=$(($SQUID_MAXFD + 4096))
upprocval /proc/sys/fs/file-max $minimal_file_max
if /usr/sbin/squid -v | grep -q "\--enable-epoll" ; then
upprocval /proc/sys/fs/epoll/max_user_watches $minimal_file_max
fi
ulimit -n $SQUID_MAXFD
}
checkconfig() {
if [ ! -f /etc/squid/${SVCNAME}.conf ]; then
eerror "You need to create /etc/squid/${SVCNAME}.conf first."
eerror "An example can be found in /etc/squid/squid.conf.default"
return 1
fi
local PIDFILE=$(awk '/^[ \t]*pid_filename[ \t]+/ { print $2 }' < /etc/squid/${SVCNAME}.conf)
[ -z ${PIDFILE} ] && PIDFILE=/var/run/squid.pid
if [ /var/run/${SVCNAME}.pid != ${PIDFILE} ]; then
eerror "/etc/squid/${SVCNAME}.conf must set pid_filename to"
eerror " /var/run/${SVCNAME}.pid"
eerror "CAUTION: http_port, cache_dir and *_log parameters must be different than"
eerror " in any other instance of squid."
return 1
fi
maxfds
local CACHE_SWAP=$(awk '/^[ \t]*cache_dir[ \t]+/ { if ($2 == "coss" ) printf "%s/stripe ", $3 ; else printf "%s/00 ", $3; }' < /etc/squid/${SVCNAME}.conf)
[ -z "$CACHE_SWAP" ] && CACHE_SWAP="/var/cache/squid/00"
local x
for x in $CACHE_SWAP ; do
if [ ! -e $x ] ; then
ebegin "Initializing cache directory ${x%/*}"
local ORIG_UMASK=$(umask)
umask 027
if ! (mkdir -p ${x%/*} && chown squid ${x%/*}) ; then
eend 1
return 1
fi
local INIT_CACHE_RESPONSE="$(/usr/sbin/squid -z -N -f /etc/squid/${SVCNAME}.conf 2>&1)"
if [ $? != 0 ] || echo "$INIT_CACHE_RESPONSE" | grep -q "erminated abnormally" ; then
umask $ORIG_UMASK
eend 1
echo "$INIT_CACHE_RESPONSE"
return 1
fi
umask $ORIG_UMASK
eend 0
break
fi
done
return 0
}
start() {
checkconfig || return 1
ebegin "Starting ${SVCNAME}"
KRB5_KTNAME="${SQUID_KEYTAB}" /usr/sbin/squid ${SQUID_OPTS} -f /etc/squid/${SVCNAME}.conf
eend $? && sleep 1
}
stop() {
ebegin "Stopping ${SVCNAME}"
if /usr/sbin/squid -k shutdown -f /etc/squid/${SVCNAME}.conf ; then
# Now we have to wait until squid has _really_ stopped.
sleep 1
if [ -f /var/run/${SVCNAME}.pid ] ; then
einfon "Waiting for squid to shutdown ."
cnt=0
while [ -f /var/run/${SVCNAME}.pid ] ; do
cnt=$(expr $cnt + 1)
if [ $cnt -gt 60 ] ; then
# Waited 120 seconds now. Fail.
echo
eend 1 "Failed."
break
fi
sleep 2
echo -n "."
done
echo
fi
else
eerror "Squid shutdown failed, probably service is already down."
fi
eend 0
}
reload() {
checkconfig || return 1
ebegin "Reloading ${SVCNAME}"
/usr/sbin/squid -k reconfigure -f /etc/squid/${SVCNAME}.conf
eend $?
}
rotate() {
service_started ${SVCNAME} || return 1
ebegin "Rotating ${SVCNAME} logs"
/usr/sbin/squid -k rotate -f /etc/squid/${SVCNAME}.conf
eend $?
}
|