xref: /OK3568_Linux_fs/yocto/meta-openembedded/meta-webserver/recipes-httpd/apache2/files/init (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/sh
2*4882a593Smuzhiyun### BEGIN INIT INFO
3*4882a593Smuzhiyun# Provides: httpd
4*4882a593Smuzhiyun# Required-Start: $local_fs $remote_fs $network $named
5*4882a593Smuzhiyun# Required-Stop: $local_fs $remote_fs $network
6*4882a593Smuzhiyun# Should-Start: distcache
7*4882a593Smuzhiyun# Short-Description: start and stop Apache HTTP Server
8*4882a593Smuzhiyun# Description: The Apache HTTP Server is an extensible server
9*4882a593Smuzhiyun#  implementing the current HTTP standards.
10*4882a593Smuzhiyun### END INIT INFO
11*4882a593Smuzhiyun
12*4882a593SmuzhiyunARGS="-D SSL -D PHP5 -k start"
13*4882a593SmuzhiyunNAME=apache2
14*4882a593SmuzhiyunPATH=/bin:/usr/bin:/sbin:/usr/sbin
15*4882a593SmuzhiyunDAEMON=/usr/sbin/httpd
16*4882a593SmuzhiyunSUEXEC=/usr/lib/apache/suexec
17*4882a593SmuzhiyunPIDFILE=/run/httpd.pid
18*4882a593SmuzhiyunCONF=/etc/apache2/httpd.conf
19*4882a593SmuzhiyunAPACHECTL=/usr/sbin/apachectl
20*4882a593Smuzhiyun
21*4882a593Smuzhiyuntrap "" 1
22*4882a593Smuzhiyunexport LANG=C
23*4882a593Smuzhiyunexport PATH
24*4882a593Smuzhiyun
25*4882a593Smuzhiyuntest -f $DAEMON || exit 0
26*4882a593Smuzhiyuntest -f $APACHECTL || exit 0
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun# ensure we don't leak environment vars into apachectl
29*4882a593SmuzhiyunAPACHECTL="env -i LANG=${LANG} PATH=${PATH} $APACHECTL"
30*4882a593Smuzhiyun
31*4882a593Smuzhiyunapache_conftest() {
32*4882a593Smuzhiyun    if $($APACHECTL configtest > /dev/null 2>&1 ); then
33*4882a593Smuzhiyun        return 0
34*4882a593Smuzhiyun    else
35*4882a593Smuzhiyun        return 1
36*4882a593Smuzhiyun    fi
37*4882a593Smuzhiyun}
38*4882a593Smuzhiyun
39*4882a593Smuzhiyunapache_wait_start() {
40*4882a593Smuzhiyun    local STATUS=$1
41*4882a593Smuzhiyun
42*4882a593Smuzhiyun    if [ $STATUS != 0 ] ; then
43*4882a593Smuzhiyun        return $STATUS
44*4882a593Smuzhiyun    fi
45*4882a593Smuzhiyun
46*4882a593Smuzhiyun    local i=0
47*4882a593Smuzhiyun    while : ; do
48*4882a593Smuzhiyun            PIDTMP=$(pidof $DAEMON | tr ' ' '\n' | grep -w $(cat $PIDFILE))
49*4882a593Smuzhiyun            if [ -n "${PIDTMP:-}" ] && kill -0 "${PIDTMP:-}" 2> /dev/null; then
50*4882a593Smuzhiyun                    return $STATUS
51*4882a593Smuzhiyun            fi
52*4882a593Smuzhiyun
53*4882a593Smuzhiyun            if [ $i = "20" ] ; then
54*4882a593Smuzhiyun                    return 2
55*4882a593Smuzhiyun            fi
56*4882a593Smuzhiyun
57*4882a593Smuzhiyun            sleep 1
58*4882a593Smuzhiyun            i=$(($i+1))
59*4882a593Smuzhiyun    done
60*4882a593Smuzhiyun}
61*4882a593Smuzhiyun
62*4882a593Smuzhiyunapache_wait_stop() {
63*4882a593Smuzhiyun    local STATUS=$1
64*4882a593Smuzhiyun
65*4882a593Smuzhiyun    if [ $STATUS != 0 ] ; then
66*4882a593Smuzhiyun        return $STATUS
67*4882a593Smuzhiyun    fi
68*4882a593Smuzhiyun
69*4882a593Smuzhiyun    PIDTMP=$(pidof $DAEMON | tr ' ' '\n' | grep -w $(cat $PIDFILE))
70*4882a593Smuzhiyun    if [ -n "${PIDTMP:-}" ] && kill -0 "${PIDTMP:-}" 2> /dev/null; then
71*4882a593Smuzhiyun            local i=0
72*4882a593Smuzhiyun            while kill -0 "${PIDTMP:-}" 2> /dev/null;  do
73*4882a593Smuzhiyun                    if [ $i = '60' ]; then
74*4882a593Smuzhiyun                            STATUS=2
75*4882a593Smuzhiyun                            break
76*4882a593Smuzhiyun                    fi
77*4882a593Smuzhiyun                    sleep 1
78*4882a593Smuzhiyun                    i=$(($i+1))
79*4882a593Smuzhiyun            done
80*4882a593Smuzhiyun            return $STATUS
81*4882a593Smuzhiyun    else
82*4882a593Smuzhiyun        return $STATUS
83*4882a593Smuzhiyun    fi
84*4882a593Smuzhiyun}
85*4882a593Smuzhiyun
86*4882a593Smuzhiyun#
87*4882a593Smuzhiyun# Function that starts the daemon/service
88*4882a593Smuzhiyun#
89*4882a593Smuzhiyundo_start()
90*4882a593Smuzhiyun{
91*4882a593Smuzhiyun    # Return
92*4882a593Smuzhiyun    #   0 if daemon has been started
93*4882a593Smuzhiyun    #   1 if daemon was already running
94*4882a593Smuzhiyun    #   2 if daemon could not be started
95*4882a593Smuzhiyun
96*4882a593Smuzhiyun    if [ -e $PIDFILE ] && pidof $DAEMON | tr ' ' '\n' | grep -w $(cat $PIDFILE) > /dev/null 2>&1 ; then
97*4882a593Smuzhiyun            return 1
98*4882a593Smuzhiyun    fi
99*4882a593Smuzhiyun
100*4882a593Smuzhiyun    if apache_conftest ; then
101*4882a593Smuzhiyun            $APACHECTL start
102*4882a593Smuzhiyun            apache_wait_start $?
103*4882a593Smuzhiyun            return $?
104*4882a593Smuzhiyun    else
105*4882a593Smuzhiyun            return 2
106*4882a593Smuzhiyun    fi
107*4882a593Smuzhiyun}
108*4882a593Smuzhiyun
109*4882a593Smuzhiyun#
110*4882a593Smuzhiyun# Function that stops the daemon/service
111*4882a593Smuzhiyun#
112*4882a593Smuzhiyundo_stop()
113*4882a593Smuzhiyun{
114*4882a593Smuzhiyun    # Return
115*4882a593Smuzhiyun    #   0 if daemon has been stopped
116*4882a593Smuzhiyun    #   1 if daemon was already stopped
117*4882a593Smuzhiyun    #   2 if daemon could not be stopped
118*4882a593Smuzhiyun    #   other if a failure occurred
119*4882a593Smuzhiyun
120*4882a593Smuzhiyun        local AP_RET=0
121*4882a593Smuzhiyun
122*4882a593Smuzhiyun        if pidof $DAEMON > /dev/null 2>&1 ; then
123*4882a593Smuzhiyun                if [ -e $PIDFILE ] && pidof $DAEMON | tr ' ' '\n' | grep -w $(cat $PIDFILE) > /dev/null 2>&1 ; then
124*4882a593Smuzhiyun                        AP_RET=2
125*4882a593Smuzhiyun                else
126*4882a593Smuzhiyun                        AP_RET=1
127*4882a593Smuzhiyun                fi
128*4882a593Smuzhiyun        else
129*4882a593Smuzhiyun            AP_RET=0
130*4882a593Smuzhiyun        fi
131*4882a593Smuzhiyun
132*4882a593Smuzhiyun        # AP_RET is:
133*4882a593Smuzhiyun        # 0 if Apache (whichever) is not running
134*4882a593Smuzhiyun        # 1 if Apache (whichever) is running
135*4882a593Smuzhiyun        # 2 if Apache from the PIDFILE is running
136*4882a593Smuzhiyun
137*4882a593Smuzhiyun        if [ $AP_RET = 0 ] ; then
138*4882a593Smuzhiyun                return 1
139*4882a593Smuzhiyun        fi
140*4882a593Smuzhiyun
141*4882a593Smuzhiyun        if [ $AP_RET = 2 ] && apache_conftest ; then
142*4882a593Smuzhiyun                $APACHECTL stop
143*4882a593Smuzhiyun                apache_wait_stop $?
144*4882a593Smuzhiyun                return $?
145*4882a593Smuzhiyun        else
146*4882a593Smuzhiyun                if [ $AP_RET = 2 ]; then
147*4882a593Smuzhiyun                        kill $(pidof $DAEMON | tr ' ' '\n' | grep -w $(cat $PIDFILE))
148*4882a593Smuzhiyun                        apache_wait_stop $?
149*4882a593Smuzhiyun                        return $?
150*4882a593Smuzhiyun                elif [ $AP_RET = 1 ] ; then
151*4882a593Smuzhiyun                        return 2
152*4882a593Smuzhiyun                fi
153*4882a593Smuzhiyun        fi
154*4882a593Smuzhiyun
155*4882a593Smuzhiyun}
156*4882a593Smuzhiyun
157*4882a593Smuzhiyuncase "$1" in
158*4882a593Smuzhiyun  start)
159*4882a593Smuzhiyun    echo -n "Starting web server: $NAME"
160*4882a593Smuzhiyun    do_start
161*4882a593Smuzhiyun    case $? in
162*4882a593Smuzhiyun        0|1)
163*4882a593Smuzhiyun            echo .
164*4882a593Smuzhiyun            exit 0
165*4882a593Smuzhiyun            ;;
166*4882a593Smuzhiyun        2)
167*4882a593Smuzhiyun            echo failed
168*4882a593Smuzhiyun            exit 1
169*4882a593Smuzhiyun            ;;
170*4882a593Smuzhiyun    esac
171*4882a593Smuzhiyun    ;;
172*4882a593Smuzhiyun
173*4882a593Smuzhiyun  stop)
174*4882a593Smuzhiyun    echo -n "Stopping web server: $NAME"
175*4882a593Smuzhiyun    do_stop
176*4882a593Smuzhiyun    case $? in
177*4882a593Smuzhiyun        0|1)
178*4882a593Smuzhiyun            echo .
179*4882a593Smuzhiyun            exit 0
180*4882a593Smuzhiyun            ;;
181*4882a593Smuzhiyun        2)
182*4882a593Smuzhiyun            echo failed
183*4882a593Smuzhiyun            exit 1
184*4882a593Smuzhiyun            ;;
185*4882a593Smuzhiyun    esac
186*4882a593Smuzhiyun    ;;
187*4882a593Smuzhiyun
188*4882a593Smuzhiyun  reload)
189*4882a593Smuzhiyun    echo -n "Reloading $NAME configuration"
190*4882a593Smuzhiyun    kill -HUP `cat $PIDFILE`
191*4882a593Smuzhiyun    ;;
192*4882a593Smuzhiyun
193*4882a593Smuzhiyun  reload-modules)
194*4882a593Smuzhiyun    echo -n "Reloading $NAME modules"
195*4882a593Smuzhiyun    $APACHECTL restart
196*4882a593Smuzhiyun    ;;
197*4882a593Smuzhiyun
198*4882a593Smuzhiyun  restart)
199*4882a593Smuzhiyun    echo "Restarting web server: $NAME"
200*4882a593Smuzhiyun    do_stop
201*4882a593Smuzhiyun    case "$?" in
202*4882a593Smuzhiyun        0|1)
203*4882a593Smuzhiyun            do_start
204*4882a593Smuzhiyun            exit $?
205*4882a593Smuzhiyun            ;;
206*4882a593Smuzhiyun        *)
207*4882a593Smuzhiyun            # Failed to stop
208*4882a593Smuzhiyun            exit 1
209*4882a593Smuzhiyun            ;;
210*4882a593Smuzhiyun    esac
211*4882a593Smuzhiyun    ;;
212*4882a593Smuzhiyun
213*4882a593Smuzhiyun  force-reload)
214*4882a593Smuzhiyun    $0 reload-modules
215*4882a593Smuzhiyun    exit $?
216*4882a593Smuzhiyun    ;;
217*4882a593Smuzhiyun
218*4882a593Smuzhiyun  *)
219*4882a593Smuzhiyun    echo "Usage: /etc/init.d/$NAME {start|stop|reload|reload-modules|force-reload|restart}"
220*4882a593Smuzhiyun    exit 1
221*4882a593Smuzhiyun    ;;
222*4882a593Smuzhiyunesac
223*4882a593Smuzhiyun
224*4882a593Smuzhiyunif [ $? = 0 ]; then
225*4882a593Smuzhiyun	echo .
226*4882a593Smuzhiyun	exit 0
227*4882a593Smuzhiyunelse
228*4882a593Smuzhiyun	echo failed
229*4882a593Smuzhiyun	exit 1
230*4882a593Smuzhiyunfi
231