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