forked from pool/apache2
This commit is contained in:
324
rc.apache2
Normal file
324
rc.apache2
Normal file
@@ -0,0 +1,324 @@
|
||||
#!/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, 2004, 2005
|
||||
#
|
||||
#
|
||||
# /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: Apache 2.2 httpd
|
||||
# Description: Start the httpd daemon Apache
|
||||
### END INIT INFO
|
||||
|
||||
pname=apache2
|
||||
: ${sysconfdir:=/etc/$pname}
|
||||
: ${apache_link:=/usr/sbin/httpd2}
|
||||
: ${sysconfig_apache:=/etc/sysconfig/$pname}
|
||||
: ${pidfile:=/var/run/httpd2.pid}
|
||||
: ${logdir:=/var/log/$pname}
|
||||
: ${homedir:=/var/lib/$pname}
|
||||
|
||||
#
|
||||
# load the configuration
|
||||
#
|
||||
test -s /etc/rc.status && . /etc/rc.status && rc_reset
|
||||
|
||||
. /usr/share/$pname/load_configuration
|
||||
export ${!APACHE_*}
|
||||
|
||||
httpd_conf=${APACHE_HTTPD_CONF:-$sysconfdir/httpd.conf}
|
||||
|
||||
apache_bin=$(/usr/share/$pname/find_mpm 2>/dev/null)
|
||||
|
||||
test -L $apache_link && apache_bin=$(readlink $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 in /etc/sysconfig/$pname. $norm
|
||||
rc_failed 5
|
||||
rc_status -v1
|
||||
rc_exit
|
||||
fi
|
||||
|
||||
# a proper home should be set, otherwise the server might end up
|
||||
# with HOME=/root and some script might try to use that
|
||||
HOME=$homedir
|
||||
|
||||
get_server_flags()
|
||||
{
|
||||
unset server_flags
|
||||
case "$action" in startssl) server_flags="-DSSL";; esac
|
||||
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/$pname/get_module_list && export get_module_list_done=true
|
||||
${get_includes:=false} || /usr/share/$pname/get_includes && export get_includes_done=true
|
||||
;;
|
||||
esac
|
||||
|
||||
#
|
||||
# main part
|
||||
#
|
||||
case "$action" in
|
||||
start*)
|
||||
if [ -e $pidfile ]; then
|
||||
$0 status &>/dev/null
|
||||
ret=$?
|
||||
if [ $ret = 1 ]; then
|
||||
echo "Warning: found stale pidfile (unclean shutdown?)"
|
||||
elif [ $ret = 0 ]; then
|
||||
echo "Apache is already running ($pidfile)"
|
||||
rc_failed $ret
|
||||
rc_status -v1
|
||||
rc_exit
|
||||
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 -f -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 >&2 An SSL passphrase has not been entered within ${APACHE_START_TIMEOUT:-<not set>} seconds.
|
||||
echo >&2 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
|
||||
killall $apache_bin
|
||||
echo >&2 "Trying to start the server without SSL (-D NOSSL)."
|
||||
$0 start "$@" -D NOSSL
|
||||
# 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
|
||||
pid=$(<$pidfile)
|
||||
kill -TERM $pid 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
|
||||
continue
|
||||
fi
|
||||
if ! test -f /proc/$pid/exe; then
|
||||
break
|
||||
fi
|
||||
if test "$(readlink /proc/$pid/exe 2>/dev/null)" = $apache_bin; then
|
||||
usleep 500000
|
||||
else
|
||||
break
|
||||
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*)
|
||||
cmdline=$(echo $apache_bin -f $httpd_conf $server_flags "$@")
|
||||
out=$(su - nobody -c "$cmdline" 2>&1)
|
||||
case $out in
|
||||
*make_sock:\ could\ not\ bind\ to\ address*) echo Syntax: OK; rc_failed=0;;
|
||||
*) echo Syntax: NOT OK:; echo $out; rc_failed=1;;
|
||||
esac
|
||||
rc_exit
|
||||
;;
|
||||
|
||||
server-status)
|
||||
apache2ctl status
|
||||
;;
|
||||
|
||||
full-server-status|fullstatus)
|
||||
apache2ctl fullstatus
|
||||
;;
|
||||
|
||||
*)
|
||||
cat >&2 <<-EOF
|
||||
Usage: $0 <command> <server flags>
|
||||
|
||||
where <command> is one of:
|
||||
start - start httpd
|
||||
startssl - start httpd with -DSSL
|
||||
stop - stop httpd (sendign SIGTERM to parent)
|
||||
try-restart - stop httpd and if this succeeds (i.e. if
|
||||
it was running before), start it again.
|
||||
status - check whether httpd is running
|
||||
restart - stop httpd if running; start httpd
|
||||
reload|graceful - do a graceful restart by sending a SIGUSR1 or
|
||||
start if not running
|
||||
configtest - do a configuration syntax test
|
||||
extreme-configtest - try to run httpd as nobody (detects more errors
|
||||
by actually loading the configuration, but cannot
|
||||
read SSL certificates)
|
||||
probe - probe for the necessity of a reload, give
|
||||
out the argument which is required for a reload.
|
||||
(by comparing conf files with pidfile timestamp)
|
||||
full-server-status - dump a full status screen; requires lynx or w3m
|
||||
and mod_status enabled
|
||||
server-status - dump a short status screen; requires lynx or w3m
|
||||
and mod_status enabled
|
||||
help - this screen
|
||||
|
||||
optional server flags are passed through to httpd.
|
||||
|
||||
EOF
|
||||
exit 1
|
||||
esac
|
||||
|
||||
|
||||
# Inform the caller not only verbosely and set an exit status.
|
||||
rc_exit
|
Reference in New Issue
Block a user