diff options
Diffstat (limited to 'nonsystemd/apache-openrc/httpd.initd')
-rw-r--r-- | nonsystemd/apache-openrc/httpd.initd | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/nonsystemd/apache-openrc/httpd.initd b/nonsystemd/apache-openrc/httpd.initd new file mode 100644 index 000000000..9e504e54a --- /dev/null +++ b/nonsystemd/apache-openrc/httpd.initd @@ -0,0 +1,181 @@ +#!/usr/bin/openrc-run +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +extra_commands="configtest modules virtualhosts" +extra_started_commands="configdump fullstatus graceful gracefulstop reload" + +description_configdump="Dumps the configuration of the runing apache server. Requires server-info to be enabled and www-client/lynx." +description_configtest="Run syntax tests for configuration files." +description_fullstatus="Gives the full status of the server. Requires lynx and server-status to be enabled." +description_graceful="A graceful restart advises the children to exit after the current request and reloads the configuration." +description_gracefulstop="A graceful stop advises the children to exit after the current request and stops the server." +description_modules="Dump a list of loaded Static and Shared Modules." +description_reload="Kills all children and reloads the configuration." +description_virtualhosts="Show the settings as parsed from the config file (currently only shows the virtualhost settings)." +description_stop="Kills all children and stops the server." + +# Apply default values for some conf.d variables. +PIDFILE="${PIDFILE:-/run/httpd/httpd.pid}" +TIMEOUT=${TIMEOUT:-15} +SERVERROOT="${SERVERROOT:-/usr/lib/httpd}" +CONFIGFILE="${CONFIGFILE:-/etc/httpd/conf/httpd.conf}" +LYNX="${LYNX:-lynx -dump}" +STATUSURL="${STATUSURL:-http://localhost/server-status}" +RELOAD_TYPE="${RELOAD_TYPE:-graceful}" + +# Append the server root and configuration file parameters to the +# user's APACHE2_OPTS. +APACHE2_OPTS="${APACHE2_OPTS} -d ${SERVERROOT}" +APACHE2_OPTS="${APACHE2_OPTS} -f ${CONFIGFILE}" + +# The path to the apache2 binary. +APACHE2="/usr/bin/apachectl" + +depend() { + need net + use dns entropy logger mysql netmount postgresql + after sshd +} + +configtest() { + ebegin "Checking ${SVCNAME} configuration" + checkconfig + eend $? +} + +checkconfd() { + if [ ! -d ${SERVERROOT} ]; then + eerror "SERVERROOT does not exist: ${SERVERROOT}" + return 1 + fi +} + +checkconfig() { + checkpath --directory /run/httpd + checkconfd || return 1 + + OUTPUT=$( ${APACHE2} ${APACHE2_OPTS} -t 2>&1 ) + ret=$? + if [ $ret -ne 0 ]; then + eerror "${SVCNAME} has detected an error in your setup:" + printf "%s\n" "${OUTPUT}" + fi + + return $ret +} + +start() { + checkconfig || return 1 + + if [ -n "${STARTUPERRORLOG}" ] ; then + # We must make sure that we only append to APACHE2_OPTS + # in start() and not in stop() or anywhere else that may + # be executed along with start(), see bug #566726. + APACHE2_OPTS="${APACHE2_OPTS} -E ${STARTUPERRORLOG}" + fi + + ebegin "Starting ${SVCNAME}" + # Use start stop daemon to apply system limits #347301 + start-stop-daemon --start -- ${APACHE2} ${APACHE2_OPTS} -k start + + local i=0 retval=1 + while [ $i -lt ${TIMEOUT} ] ; do + if [ -e "${PIDFILE}" ] ; then + retval=0 + break + fi + sleep 1 && i=$(expr $i + 1) + done + + eend ${retval} +} + +stop() { + if [ "${RC_CMD}" = "restart" ]; then + checkconfig || return 1 + fi + + PID=$(cat "${PIDFILE}" 2>/dev/null) + if [ -z "${PID}" ]; then + einfo "${SVCNAME} not running (no pid file)" + return 0 + fi + + ebegin "Stopping ${SVCNAME}" + ${APACHE2} ${APACHE2_OPTS} -k stop + + local i=0 retval=0 + while ( test -f "${PIDFILE}" || pgrep -P ${PID} httpd >/dev/null ) \ + && [ $i -lt ${TIMEOUT} ]; do + sleep 1 && i=$(expr $i + 1) + done + [ -e "${PIDFILE}" ] && retval=1 + + eend ${retval} +} + +reload() { + checkconfig || return 1 + + if [ "${RELOAD_TYPE}" = "restart" ]; then + ebegin "Restarting ${SVCNAME}" + ${APACHE2} ${APACHE2_OPTS} -k restart + eend $? + elif [ "${RELOAD_TYPE}" = "graceful" ]; then + ebegin "Gracefully restarting ${SVCNAME}" + ${APACHE2} ${APACHE2_OPTS} -k graceful + eend $? + else + eerror "${RELOAD_TYPE} is not a valid RELOAD_TYPE. Please edit /etc/conf.d/${SVCNAME}" + fi +} + +graceful() { + checkconfig || return 1 + ebegin "Gracefully restarting ${SVCNAME}" + ${APACHE2} ${APACHE2_OPTS} -k graceful + eend $? +} + +gracefulstop() { + checkconfig || return 1 + ebegin "Gracefully stopping ${SVCNAME}" + ${APACHE2} ${APACHE2_OPTS} -k graceful-stop + eend $? +} + +modules() { + checkconfig || return 1 + ${APACHE2} ${APACHE2_OPTS} -M 2>&1 +} + +fullstatus() { + if ! command -v $(set -- ${LYNX}; echo $1) 2>&1 >/dev/null; then + eerror "lynx not found! you need to emerge www-client/lynx" + else + ${LYNX} ${STATUSURL} + fi +} + +virtualhosts() { + checkconfig || return 1 + ${APACHE2} ${APACHE2_OPTS} -S +} + +configdump() { + INFOURL="${INFOURL:-http://localhost/server-info}" + + checkconfd || return 1 + + if ! command -v $(set -- ${LYNX}; echo $1) 2>&1 >/dev/null; then + eerror "lynx not found! you need to emerge www-client/lynx" + else + echo "${APACHE2} started with '${APACHE2_OPTS}'" + for i in config server list; do + ${LYNX} "${INFOURL}/?${i}" | sed '/Apache Server Information/d;/^[[:space:]]\+[_]\+$/Q' + done + fi +} + +# vim: ts=4 filetype=gentoo-init-d |