220 lines
7.3 KiB
Bash
Executable file
220 lines
7.3 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
# contributor license agreements. See the NOTICE file distributed with
|
|
# this work for additional information regarding copyright ownership.
|
|
# The ASF licenses this file to You under the Apache License, Version 2.0
|
|
# (the "License"); you may not use this file except in compliance with
|
|
# the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
#
|
|
# Apache control script designed to allow an easy command line interface
|
|
# to controlling Apache. Written by Marc Slemko, 1997/08/23
|
|
#
|
|
# Heavily modified for Debian by Stefan Fritsch 2007-2010
|
|
#
|
|
# The exit codes returned are:
|
|
# XXX this doc is no longer correct now that the interesting
|
|
# XXX functions are handled by httpd
|
|
# 0 - operation completed successfully
|
|
# 1 -
|
|
# 2 - usage error
|
|
# 3 - httpd could not be started
|
|
# 4 - httpd could not be stopped
|
|
# 5 - httpd could not be started during a restart
|
|
# 6 - httpd could not be restarted during a restart
|
|
# 7 - httpd could not be restarted during a graceful restart
|
|
# 8 - configuration syntax error
|
|
#
|
|
# When multiple arguments are given, only the error from the _last_
|
|
# one is reported. Run "apachectl help" for usage info
|
|
#
|
|
|
|
set -e
|
|
|
|
ARGV="$@"
|
|
#
|
|
# |||||||||||||||||||| START CONFIGURATION SECTION ||||||||||||||||||||
|
|
# -------------------- --------------------
|
|
#
|
|
# main configuration directory
|
|
if test -z "$APACHE_CONFDIR" ; then
|
|
if test "${0##*apache2ctl-}" != "$0" ; then
|
|
APACHE_CONFDIR="/etc/apache2-${0##*apache2ctl-}"
|
|
else
|
|
APACHE_CONFDIR=/etc/apache2
|
|
fi
|
|
fi
|
|
|
|
SUFFIX="${APACHE_CONFDIR##/etc/apache2-}"
|
|
case "$SUFFIX" in
|
|
/etc/apache2)
|
|
SUFFIX=""
|
|
;;
|
|
*)
|
|
SUFFIX="@$SUFFIX"
|
|
;;
|
|
esac
|
|
APACHE_SYSTEMD_SERVICE="apache2$SUFFIX"
|
|
|
|
# the path to the environment variable file
|
|
test -z "$APACHE_ENVVARS" && APACHE_ENVVARS="$APACHE_CONFDIR/envvars"
|
|
# pick up any necessary environment variables
|
|
if test -f $APACHE_ENVVARS; then
|
|
. $APACHE_ENVVARS
|
|
fi
|
|
|
|
if test "$APACHE_CONFDIR" != /etc/apache2 ; then
|
|
APACHE_ARGUMENTS="-d $APACHE_CONFDIR $APACHE_ARGUMENTS"
|
|
fi
|
|
# the following APACHE_* variables should be set in /etc/apache2/envvars
|
|
#
|
|
# the path to your httpd binary, including options if necessary
|
|
HTTPD=${APACHE_HTTPD:-/usr/sbin/apache2}
|
|
#
|
|
# a command that outputs a formatted text version of the HTML at the
|
|
# url given on the command line. Designed for lynx, however other
|
|
# programs may work.
|
|
LYNX="${APACHE_LYNX:-www-browser -dump}"
|
|
#
|
|
# the URL to your server's mod_status status page. If you do not
|
|
# have one, then status and fullstatus will not work.
|
|
STATUSURL="${APACHE_STATUSURL:-http://localhost:80/server-status}"
|
|
#
|
|
# Set this variable to a command that increases the maximum
|
|
# number of file descriptors allowed per child process. This is
|
|
# critical for configurations that use many file descriptors,
|
|
# such as mass vhosting, or a multithreaded server.
|
|
ULIMIT_MAX_FILES="${APACHE_ULIMIT_MAX_FILES:-ulimit -n 8192}"
|
|
# -------------------- --------------------
|
|
# |||||||||||||||||||| END CONFIGURATION SECTION ||||||||||||||||||||
|
|
|
|
# Set the maximum number of file descriptors allowed per child process.
|
|
if [ "x$ULIMIT_MAX_FILES" != "x" ] && [ `id -u` -eq 0 ] ; then
|
|
if ! $ULIMIT_MAX_FILES ; then
|
|
echo Setting ulimit failed. See README.Debian for more information. >&2
|
|
fi
|
|
fi
|
|
|
|
ERROR=0
|
|
if [ "x$ARGV" = "x" ] || [ "x$ARGV" = "xusage" ] || [ "x$ARGV" = "xhelp" ] || [ "x$ARGV" = "x--help" ]; then
|
|
echo "Usage: $0 start|stop|restart|graceful|graceful-stop|configtest|status|fullstatus|help" >&2
|
|
echo " $0 <apache2 args>" >&2
|
|
echo " $0 -h (for help on <apache2 args>)" >&2
|
|
exit 1
|
|
fi
|
|
|
|
get_status () {
|
|
if ! $LYNX $STATUSURL ; then
|
|
echo "'$LYNX $STATUSURL'" failed. >&2
|
|
echo Maybe you need to install a package providing www-browser or you >&2
|
|
echo need to adjust the APACHE_LYNX variable in /etc/apache2/envvars >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
mkdir_chown () {
|
|
local OWNER="$1"
|
|
local DIR="$2"
|
|
local STAT="$(LC_ALL=C stat -c %F:%U $DIR 2> /dev/null || true)"
|
|
if [ "$STAT" = "" ] ; then
|
|
local TMPNAME=$(mktemp -d $DIR.XXXXXXXXXX) || exit 1
|
|
chmod 755 $TMPNAME || exit 1
|
|
chown $OWNER $TMPNAME || exit 1
|
|
if ! mv -T $TMPNAME $DIR 2> /dev/null; then
|
|
rmdir $TMPNAME
|
|
# check for race with other apachectl
|
|
if [ "$(LC_ALL=C stat -c %F:%U $DIR 2>/dev/null)" != "directory:$OWNER" ]
|
|
then
|
|
echo Cannot create $DIR with owner $OWNER.
|
|
echo Please fix manually. Aborting.
|
|
exit 1
|
|
fi
|
|
fi
|
|
elif [ "$STAT" != "directory:$OWNER" ] ; then
|
|
echo $DIR already exists but is not a directory owned by $OWNER.
|
|
echo Please fix manually. Aborting.
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
|
|
[ ! -d ${APACHE_RUN_DIR:-/var/run/apache2} ] && mkdir -p ${APACHE_RUN_DIR:-/var/run/apache2}
|
|
[ ! -d ${APACHE_RUN_DIR:-/var/run/apache2}/socks ] && mkdir_chown ${APACHE_RUN_USER:-www-data} ${APACHE_RUN_DIR:-/var/run/apache2}/socks
|
|
[ ! -d ${APACHE_LOCK_DIR:-/var/lock/apache2} ] && mkdir_chown ${APACHE_RUN_USER:-www-data} ${APACHE_LOCK_DIR:-/var/lock/apache2}
|
|
|
|
case "$ARGV" in
|
|
start)
|
|
# ssl_scache shouldn't be here if we're just starting up.
|
|
# (this is bad if there are several apache2 instances running)
|
|
[ -e ${APACHE_RUN_DIR:-/var/run/apache2}/*ssl_scache* ] && rm -f ${APACHE_RUN_DIR:-/var/run/apache2}/*ssl_scache*
|
|
|
|
need_systemd=false
|
|
if [ -z "$APACHE_STARTED_BY_SYSTEMD" ] ; then
|
|
case "$(readlink -f /proc/1/exe)" in
|
|
*systemd*)
|
|
need_systemd=true
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
fi
|
|
if $need_systemd ; then
|
|
# If running on systemd we should not start httpd without systemd
|
|
# or systemd will get confused about the status of httpd.
|
|
echo "Invoking 'systemctl start $APACHE_SYSTEMD_SERVICE'."
|
|
echo "Use 'systemctl status $APACHE_SYSTEMD_SERVICE' for more info."
|
|
systemctl start "$APACHE_SYSTEMD_SERVICE"
|
|
else
|
|
unset APACHE_STARTED_BY_SYSTEMD
|
|
$HTTPD ${APACHE_ARGUMENTS} -k "$ARGV"
|
|
fi
|
|
|
|
ERROR=$?
|
|
;;
|
|
stop|graceful-stop)
|
|
$HTTPD ${APACHE_ARGUMENTS} -k "$ARGV"
|
|
ERROR=$?
|
|
;;
|
|
restart|graceful)
|
|
if $HTTPD ${APACHE_ARGUMENTS} -t 2> /dev/null ; then
|
|
$HTTPD ${APACHE_ARGUMENTS} -k "$ARGV"
|
|
else
|
|
$HTTPD ${APACHE_ARGUMENTS} -t
|
|
fi
|
|
ERROR=$?
|
|
;;
|
|
startssl|sslstart|start-SSL)
|
|
echo The startssl option is no longer supported.
|
|
echo Please edit httpd.conf to include the SSL configuration settings
|
|
echo and then use "apachectl start".
|
|
ERROR=2
|
|
;;
|
|
configtest)
|
|
$HTTPD ${APACHE_ARGUMENTS} -t
|
|
ERROR=$?
|
|
;;
|
|
status)
|
|
get_status | awk ' /process$/ { print; exit } { print } '
|
|
;;
|
|
fullstatus)
|
|
get_status
|
|
;;
|
|
*)
|
|
$HTTPD ${APACHE_ARGUMENTS} "$@"
|
|
ERROR=$?
|
|
esac
|
|
|
|
if [ "$ERROR" != 0 ] ; then
|
|
echo Action \'"$@"\' failed.
|
|
echo The Apache error log may have more information.
|
|
fi
|
|
exit $ERROR
|