
Change start, stop, and restart functions in apache2 init script to return only after completion (i.e. the server has started/stopped, not just received a kill signal). Starting and stopping the server in quick sucession results in an error because the server will attempt to stop before it has had time to start and vice versa. Signed-off-by: Adam Chappell <adam.chappell@ni.com> Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
4.8 KiB
Executable File
#!/bin/sh
BEGIN INIT INFO
Provides: httpd
Required-Start: $local_fs $remote_fs $network $named
Required-Stop: $local_fs $remote_fs $network
Should-Start: distcache
Short-Description: start and stop Apache HTTP Server
Description: The Apache HTTP Server is an extensible server
implementing the current HTTP standards.
END INIT INFO
ARGS="-D SSL -D PHP5 -k start" NAME=apache2 PATH=/bin:/usr/bin:/sbin:/usr/sbin DAEMON=/usr/sbin/httpd SUEXEC=/usr/lib/apache/suexec PIDFILE=/run/httpd.pid CONF=/etc/apache2/httpd.conf APACHECTL=/usr/sbin/apachectl
trap "" 1 export LANG=C export PATH
test -f $DAEMON || exit 0 test -f $APACHECTL || exit 0
ensure we don't leak environment vars into apachectl
APACHECTL="env -i LANG=${LANG} PATH=${PATH} $APACHECTL"
apache_conftest() { if $($APACHECTL configtest > /dev/null 2>&1 ); then return 0 else return 1 fi }
apache_wait_start() { local STATUS=$1
if [ $STATUS != 0 ] ; then
return $STATUS
fi
local i=0
while : ; do
PIDTMP=$(pidof $DAEMON | tr ' ' '\n' | grep -w $(cat $PIDFILE))
if [ -n "${PIDTMP:-}" ] && kill -0 "${PIDTMP:-}" 2> /dev/null; then
return $STATUS
fi
if [ $i = "20" ] ; then
return 2
fi
sleep 1
i=$(($i+1))
done
}
apache_wait_stop() { local STATUS=$1
if [ $STATUS != 0 ] ; then
return $STATUS
fi
PIDTMP=$(pidof $DAEMON | tr ' ' '\n' | grep -w $(cat $PIDFILE))
if [ -n "${PIDTMP:-}" ] && kill -0 "${PIDTMP:-}" 2> /dev/null; then
local i=0
while kill -0 "${PIDTMP:-}" 2> /dev/null; do
if [ $i = '60' ]; then
STATUS=2
break
fi
sleep 1
i=$(($i+1))
done
return $STATUS
else
return $STATUS
fi
}
Function that starts the daemon/service
do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started
if [ -e $PIDFILE ] && pidof $DAEMON | tr ' ' '\n' | grep -w $(cat $PIDFILE) > /dev/null 2>&1 ; then
return 1
fi
if apache_conftest ; then
$APACHECTL start
apache_wait_start $?
return $?
else
return 2
fi
}
Function that stops the daemon/service
do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred
local AP_RET=0
if pidof $DAEMON > /dev/null 2>&1 ; then
if [ -e $PIDFILE ] && pidof $DAEMON | tr ' ' '\n' | grep -w $(cat $PIDFILE) > /dev/null 2>&1 ; then
AP_RET=2
else
AP_RET=1
fi
else
AP_RET=0
fi
# AP_RET is:
# 0 if Apache (whichever) is not running
# 1 if Apache (whichever) is running
# 2 if Apache from the PIDFILE is running
if [ $AP_RET = 0 ] ; then
return 1
fi
if [ $AP_RET = 2 ] && apache_conftest ; then
$APACHECTL stop
apache_wait_stop $?
return $?
else
if [ $AP_RET = 2 ]; then
kill $(pidof $DAEMON | tr ' ' '\n' | grep -w $(cat $PIDFILE))
apache_wait_stop $?
return $?
elif [ $AP_RET = 1 ] ; then
return 2
fi
fi
}
case "$1" in start) echo -n "Starting web server: $NAME" do_start case $? in 0|1) echo . exit 0 ;; 2) echo failed exit 1 ;; esac ;;
stop) echo -n "Stopping web server: $NAME" do_stop case $? in 0|1) echo . exit 0 ;; 2) echo failed exit 1 ;; esac ;;
reload)
echo -n "Reloading $NAME configuration"
kill -HUP cat $PIDFILE
;;
reload-modules) echo -n "Reloading $NAME modules" $APACHECTL restart ;;
restart) echo "Restarting web server: $NAME" do_stop case "$?" in 0|1) do_start exit $? ;; *) # Failed to stop exit 1 ;; esac ;;
force-reload) $0 reload-modules exit $? ;;
*) echo "Usage: /etc/init.d/$NAME {start|stop|reload|reload-modules|force-reload|restart}" exit 1 ;; esac
if [ $? = 0 ]; then echo . exit 0 else echo failed exit 1 fi