#!/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 # 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 " >&2 echo " $0 -h (for help on )" >&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) 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