aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Chappell <adam.chappell@ni.com>2015-08-20 17:48:22 -0500
committerMartin Jansa <Martin.Jansa@gmail.com>2015-08-31 20:09:30 +0200
commitfaf070c45a67f0ad49f52bc4cb79a77f64842d93 (patch)
treeceb19578661117ceb5e284bd47d93658c9be98cb
parente5abd3c3fb72556dd6fdce126fe7b81ed1285401 (diff)
downloadmeta-openembedded-faf070c45a67f0ad49f52bc4cb79a77f64842d93.tar.gz
apache2: wait for server to start/stop/restart
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>
-rwxr-xr-xmeta-webserver/recipes-httpd/apache2/files/init165
1 files changed, 161 insertions, 4 deletions
diff --git a/meta-webserver/recipes-httpd/apache2/files/init b/meta-webserver/recipes-httpd/apache2/files/init
index a1adbd74f9..758d133b9e 100755
--- a/meta-webserver/recipes-httpd/apache2/files/init
+++ b/meta-webserver/recipes-httpd/apache2/files/init
@@ -28,14 +28,161 @@ 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"
- $APACHECTL $ARGS
+ do_start
+ case $? in
+ 0|1)
+ echo .
+ exit 0
+ ;;
+ 2)
+ echo failed
+ exit 1
+ ;;
+ esac
;;
stop)
- $APACHECTL stop
+ echo -n "Stopping web server: $NAME"
+ do_stop
+ case $? in
+ 0|1)
+ echo .
+ exit 0
+ ;;
+ 2)
+ echo failed
+ exit 1
+ ;;
+ esac
;;
reload)
@@ -49,8 +196,18 @@ case "$1" in
;;
restart)
- $APACHECTL restart
- exit $?
+ echo "Restarting web server: $NAME"
+ do_stop
+ case "$?" in
+ 0|1)
+ do_start
+ exit $?
+ ;;
+ *)
+ # Failed to stop
+ exit 1
+ ;;
+ esac
;;
force-reload)