#!/bin/sh
#
# Copyright (c) 1996, 1997, 1998 S.u.S.E. GmbH
# Copyright (c) 1998, 1999, 2000, 2001 SuSE GmbH
# Copyright (c) 2002, 2003 SuSE Linux AG
#
# Authors: Rolf Haberrecker <rolf@suse.de>, 2001
# Peter Poeml <poeml@suse.de>, 2002, 2003
#
#
# /etc/init.d/apache2
### BEGIN INIT INFO
# Provides: apache2 httpd2
# Required-Start: $local_fs $remote_fs $network
# X-UnitedLinux-Should-Start: $named $time postgresql sendmail mysql ypclient dhcp radiusd
# Required-Stop: $local_fs $remote_fs $network
# X-UnitedLinux-Should-Stop:
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: Apache2 httpd
# Description: Start the httpd daemon Apache 2
### END INIT INFO
pname=apache2
sysconfdir=/etc/apache2
apache_link=/usr/sbin/httpd2
sysconfig_apache=/etc/sysconfig/$pname
pidfile=/var/run/httpd2.pid
logdir=/var/log/apache2
rundir=/var/run/apache2
#
# load the configuration
#
test -s /etc/rc.status && . /etc/rc.status && rc_reset
. /usr/share/apache2/load_configuration
export ${!APACHE_*}
if ! [ -s /etc/sysconfig/$pname ]; then # backwards compatibility (pre 8.0)
# Determine the base and follow a runlevel link name.
base=${0##*/}
link=${base#*[SK][0-9][0-9]}
# Force execution if not called by a runlevel directory.
test $link = $base && START_APACHE2=yes
test "$START_APACHE2" = yes || exit 0
fi
httpd_conf=${APACHE_HTTPD_CONF:-$sysconfdir/httpd.conf}
apache_bin=$(/usr/share/apache2/find_mpm 2>/dev/null)
which linkto &>/dev/null || function linkto { file $1 | cut -d\ -f5; }
test -L $apache_link && apache_bin=$(linkto $apache_link)
if [ -z "$APACHE_MPM" ]; then
APACHE_MPM=${apache_bin##*-}
fi
if ! [ -x $apache_bin ]; then
echo >&2 ${warn}$apache_bin-$APACHE_MPM is not a valid httpd2 binary.
echo >&2 Check your APACHE_MPM setting.$norm
rc_failed 5
rc_status -v1
rc_exit
fi
get_server_flags()
{
unset server_flags
for i in $APACHE_SERVER_FLAGS; do
case $i in
-D) ;;
-D*) server_flags="$server_flags $i";;
*) server_flags="$server_flags -D$i";;
esac
done
}
action="$1"
case "$action" in
stop|try-restart|*status*|probe)
;;
*)
shift; get_server_flags
${get_module_list_done:=false} || /usr/share/apache2/get_module_list -q && export get_module_list_done=true
${get_includes:=false} || /usr/share/apache2/get_includes && export get_includes_done=true
;;
esac
#
# main part
#
case "$action" in
start*)
if [ -e $pidfile ]; then
$0 status &>/dev/null
if [ $? = 1 ]; then
case $APACHE_MODULES in *ssl*)
echo "Found stale pidfile (unclean shutdown?). Running /usr/share/apache2/ssl_scache_cleanup"
/usr/share/apache2/ssl_scache_cleanup
esac
fi
fi
echo -n "Starting httpd2 (${APACHE_MPM:-${apache_bin#*-}}) "
cmdline=$(echo $apache_bin -f $httpd_conf $server_flags "$@")
if eval $cmdline -t > $logdir/rc$pname.out 2>&1 ; then
export -n ${!APACHE_*}
eval startproc -t ${APACHE_START_TIMEOUT:-2} $cmdline
ret=$?
if test -t 1 && stty -a 2>/dev/null | grep -q -- -echo\ ; then
# this means that apache was still waiting for a passphrase to be entered
stty echo 2>/dev/null
echo;echo
echo An SSL passphrase has not been entered within ${APACHE_START_TIMEOUT:-<not set>} seconds.
echo To increase this timeout, adjust APACHE_START_TIMEOUT in $sysconfig_apache .
# this surely means that apache won't start, despite it looked good to startproc
rc_failed 1
rc_status -v1
rc_exit
else
rc_failed $ret
rc_status -v
fi
else
if [ "$link" = "$base" ] ; then
cat $logdir/rc$pname.out
echo >&2
echo >&2 The command line was:
echo >&2 $cmdline
echo >&2
else
echo -e -n "\nsee $logdir/rc$pname.out for details\n";
fi
rc_failed 1
rc_status -v1
fi
;;
stop)
echo -n "Shutting down httpd2 "
if [ ! -f $pidfile -a -f $pidfile.rpmsave ]; then mv $pidfile.rpmsave $pidfile; fi
if ! [ -f $pidfile ]; then
echo -n "(not running)"
else
kill -TERM $(<$pidfile) 2>/dev/null
case $? in
1) echo -n "(not running)";;
0) # wait until the processes are gone (the parent is the last one)
echo -n "(waiting for all children to terminate) "
for ((wait=0; wait<120; wait++)); do
if test -f $pidfile; then usleep 500000
else continue 2
fi
done
;;
esac
fi
rc_status -v
;;
try-restart)
## Do a restart only if the service was active before.
## Note: try-restart is now part of LSB (as of 1.9).
## RH has a similar command named condrestart.
$0 status
if test $? = 0; then
$0 restart
else
rc_reset # Not running is not a failure.
fi
# Remember status and be quiet
rc_status
;;
restart)
$0 configtest "$@" || { rc_failed $?; rc_exit; }
if $0 status &>/dev/null; then
$0 stop
fi
$0 start "$@"
# Remember status and be quiet
rc_status
;;
restart-hup)
$0 configtest "$@" || { rc_failed $?; rc_exit; }
if $0 status &>/dev/null; then
echo -n "Restarting httpd2 (SIGHUP)"
kill -HUP $(<$pidfile) || return=$rc_failed
else
$0 start "$@"
fi
# Remember status and be quiet
rc_status -v
;;
reload|force-reload|graceful)
echo -n "Reload httpd2 (graceful restart)"
cmdline=$(echo $apache_bin -f $httpd_conf $server_flags "$@")
if eval $cmdline -t &> $logdir/rc$pname.out; then
killproc -USR1 $apache_bin || return=$rc_failed
rc_status -v
else
if [ "$link" = "$base" ] ; then
echo -e -n "\n\n"
cat $logdir/rc$pname.out
echo >&2
echo >&2 The command line was:
echo >&2 $cmdline
echo >&2
else
echo -e -n "\nsee $logdir/rc$pname.out for details\n";
fi
rc_failed 6
rc_status -v1
fi
;;
status)
if [ ! -f $pidfile -a -f $pidfile.rpmsave ]; then mv $pidfile.rpmsave $pidfile; fi
echo -n "Checking for httpd2: "
# we don't use checkproc here since it is confused when we exchange the binaries
if ! [ -f $pidfile ]; then
# not running
rc_failed 3
elif [ -s $pidfile -a -d /proc/$(<$pidfile) ]; then
# running
:
else
# stale pid file
rc_failed 1
#rm -f $pidfile
fi
rc_status -v
;;
probe)
## Optional: Probe for the necessity of a reload,
## give out the argument which is required for a reload.
for i in $httpd_conf \
$APACHE_CONF_INCLUDE_FILES \
$APACHE_CONF_INCLUDE_DIRS
do
if [ $i -nt $pidfile ]; then
echo reload
break
fi
done
;;
conf*|test|syntax|check)
cmdline=$(echo $apache_bin -f $httpd_conf $server_flags "$@")
eval $cmdline -t
rc_failed $?
rc_exit
;;
extr*)