Apache is dead after upgrading Debian and Kolab

Thomas Luft thomas at die-lufts.org
Wed Aug 5 10:41:39 CEST 2015


Hi Jochen,
hi everybody,

I changed the init.d script but the error persists. The log stopped this 
morning at 6:28, after that the process is still there but apache does 
not react.

Maybe I am changing the wrong file since Debian uses init.d no more?

I attached my /etc/init.d/apache2 script:

Regards

Thomas

#!/bin/sh
### BEGIN INIT INFO
# Provides:          apache2
# Required-Start:    $local_fs $remote_fs $network $syslog $named
# Required-Stop:     $local_fs $remote_fs $network $syslog $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     true
# Short-Description: Apache2 web server
# Description:       Start the web server and associated helpers
#  This script will start apache2, and possibly all associated instances.
#  Moreover, it will set-up temporary directories and helper tools such as
#  htcacheclean when required by the configuration.
### END INIT INFO

DESC="web server"
NAME=apache2
DAEMON=/usr/sbin/$NAME

SCRIPTNAME="${0##*/}"
SCRIPTNAME="${SCRIPTNAME##[KS][0-9][0-9]}"
if [ -n "$APACHE_CONFDIR" ] ; then
     if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then
             DIR_SUFFIX="${APACHE_CONFDIR##/etc/apache2-}"
     else
             DIR_SUFFIX=
     fi
elif [ "${SCRIPTNAME##apache2-}" != "$SCRIPTNAME" ] ; then
     DIR_SUFFIX="-${SCRIPTNAME##apache2-}"
     APACHE_CONFDIR=/etc/apache2$DIR_SUFFIX
else
     DIR_SUFFIX=
     APACHE_CONFDIR=/etc/apache2
fi
if [ -z "$APACHE_ENVVARS" ] ; then
     APACHE_ENVVARS=$APACHE_CONFDIR/envvars
fi
export APACHE_CONFDIR APACHE_ENVVARS

ENV="env -i LANG=C 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
if [ "$APACHE_CONFDIR" != /etc/apache2 ] ; then
     ENV="$ENV APACHE_CONFDIR=$APACHE_CONFDIR"
fi
if [ "$APACHE_ENVVARS" != "$APACHE_CONFDIR/envvars" ] ; then
     ENV="$ENV APACHE_ENVVARS=$APACHE_ENVVARS"
fi


#edit /etc/default/apache2 to change this.
HTCACHECLEAN_RUN=auto
HTCACHECLEAN_MODE=daemon
HTCACHECLEAN_SIZE=300M
HTCACHECLEAN_DAEMON_INTERVAL=120
HTCACHECLEAN_PATH=/var/cache/apache2$DIR_SUFFIX/mod_cache_disk
HTCACHECLEAN_OPTIONS=""

# Read configuration variable file if it is present
if [ -f /etc/default/apache2$DIR_SUFFIX ] ; then
     . /etc/default/apache2$DIR_SUFFIX
elif [ -f /etc/default/apache2 ] ; then
     . /etc/default/apache2
fi

PIDFILE=$(. $APACHE_ENVVARS && echo $APACHE_PID_FILE)

VERBOSE=no
if [ -f /etc/default/rcS ]; then
     . /etc/default/rcS
fi
. /lib/lsb/init-functions


# Now, set defaults:
APACHE2CTL="$ENV apache2ctl"
HTCACHECLEAN="$ENV htcacheclean"
PIDFILE=$(. $APACHE_ENVVARS && echo $APACHE_PID_FILE)
APACHE2_INIT_MESSAGE=""

CONFTEST_OUTFILE=
cleanup() {
     if [ -n "$CONFTEST_OUTFILE" ] ; then
         rm -f "$CONFTEST_OUTFILE"
     fi
}
trap cleanup 0  # "0" means "EXIT", but "EXIT" is not portable


apache_conftest() {
     [ -z "$CONFTEST_OUTFILE" ] || rm -f "$CONFTEST_OUTFILE"
     CONFTEST_OUTFILE=$(mktemp)
     if ! $APACHE2CTL configtest > "$CONFTEST_OUTFILE" 2>&1 ; then
         return 1
     else
         rm -f "$CONFTEST_OUTFILE"
         CONFTEST_OUTFILE=
         return 0
     fi
}

clear_error_msg() {
     [ -z "$CONFTEST_OUTFILE" ] || rm -f "$CONFTEST_OUTFILE"
     CONFTEST_OUTFILE=
     APACHE2_INIT_MESSAGE=
}

print_error_msg() {
     [ -z "$APACHE2_INIT_MESSAGE" ] || log_warning_msg 
"$APACHE2_INIT_MESSAGE"
     if [ -n "$CONFTEST_OUTFILE" ] ; then
         echo "Output of config test was:" >&2
         cat "$CONFTEST_OUTFILE" >&2
         rm -f "$CONFTEST_OUTFILE"
         CONFTEST_OUTFILE=
     fi
}

apache_wait_start() {
     local STATUS=$1
     local i=0

     if [ $STATUS != 0 ] ; then
             return $STATUS
     fi
     while : ; do
             PIDTMP=$(pidofproc -p $PIDFILE $DAEMON)
             if [ -n "${PIDTMP:-}" ] && kill -0 "${PIDTMP:-}" 2> 
/dev/null; then
                     return $STATUS
             fi

             if [ $i = "20" ] ; then
                     APACHE2_INIT_MESSAGE="The apache2$DIR_SUFFIX 
instance did not start within 20 seconds. Please read the log files to 
discover problems"
                     return 2
             fi

             [ "$VERBOSE" != no ] && log_progress_msg "."
             sleep 1
             i=$(($i+1))
     done
}

apache_wait_stop() {
     local STATUS=$1

     if [ $STATUS != 0 ] ; then
             return $STATUS
     fi

     PIDTMP=$(pidofproc -p $PIDFILE $DAEMON)
     if [ -n "${PIDTMP:-}" ] && kill -0 "${PIDTMP:-}" 2> /dev/null; then
             local i=0
             while kill -0 "${PIDTMP:-}" 2> /dev/null;  do
                     if [ $i = '60' ]; then
                             break
                             STATUS=2
                     fi
                     [ "$VERBOSE" != no ] && log_progress_msg "."
                     sleep 1
                     i=$(($i+1))
             done
             return $STATUS
     else
         return $STATUS
     fi
}


#
# Function that starts the daemon/service
#
do_start()
{
     # Return
     #   0 if daemon has been started
     #   1 if daemon was already running
     #   2 if daemon could not be started

     if pidofproc -p $PIDFILE "$DAEMON" > /dev/null 2>&1 ; then
             return 1
     fi

     if apache_conftest ; then
             $APACHE2CTL start
             apache_wait_start $?
             return $?
     else
             APACHE2_INIT_MESSAGE="The apache2$DIR_SUFFIX configtest 
failed."
             return 2
     fi
}

#
# Function that stops the daemon/service
#
do_stop()
{
     # Return
     #   0 if daemon has been stopped
     #   1 if daemon was already stopped
     #   2 if daemon could not be stopped
     #   other if a failure occurred

     # either "stop" or "graceful-stop"
     local STOP=$1
     # can't use pidofproc from LSB here
     local AP_RET=0

     if pidof $DAEMON > /dev/null 2>&1 ; then
             if [ -e $PIDFILE ] && pidof $DAEMON | tr ' ' '\n' | grep -w 
$(cat $PIDFILE) > /dev/null 2>&1 ; then
                     AP_RET=2
             else
                     AP_RET=1
             fi
     else
         AP_RET=0
     fi

     # AP_RET is:
     # 0 if Apache (whichever) is not running
     # 1 if Apache (whichever) is running
     # 2 if Apache from the PIDFILE is running

     if [ $AP_RET = 0 ] ; then
             return 1
     fi

     if [ $AP_RET = 2 ] && apache_conftest ; then
             $APACHE2CTL $STOP > /dev/null 2>&1
             apache_wait_stop $?
             return $?
     else
             if [ $AP_RET = 2 ]; then
                     clear_error_msg
                     APACHE2_INIT_MESSAGE="The apache2$DIR_SUFFIX 
configtest failed, so we are trying to kill it manually. This is almost 
certainly suboptimal, so please make sure your system is working as 
you'd expect now!"
                     killproc -p $PIDFILE $DAEMON
                     apache_wait_stop $?
                     return $?
             elif [ $AP_RET = 1 ] ; then
                     APACHE2_INIT_MESSAGE="There are processes named 
'apache2' running which do not match your pid file which are left 
untouched in the name of safety, Please review the situation by hand".
                     return 2
             fi
     fi

}


#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
     if apache_conftest; then
             if ! pidofproc -p $PIDFILE "$DAEMON" > /dev/null 2>&1 ; then
                     APACHE2_INIT_MESSAGE="Apache2 is not running"
                     return 2
             fi
         # Replace graceful with full restart because of
         # a bug in kolab
         $APACHE2CTL restart > /dev/null 2>&1
             # $APACHE2CTL graceful > /dev/null 2>&1
             return $?
     else
             APACHE2_INIT_MESSAGE="The apache2$DIR_SUFFIX configtest 
failed. Not doing anything."
             return 2
     fi
}


check_htcacheclean() {
     [ "$HTCACHECLEAN_MODE" = "daemon" ] || return 1
     [ "$HTCACHECLEAN_RUN"  = "yes"    ] && return 0

     MODSDIR=$(. $APACHE_ENVVARS && echo $APACHE_MODS_ENABLED)
             [ "$HTCACHECLEAN_RUN"  = "auto" \
                     -a -e 
${MODSDIR:-$APACHE_CONFDIR/mods-enabled}/cache_disk.load ] && \
                     return 0
     return 1
}

start_htcacheclean() {
        $HTCACHECLEAN $HTCACHECLEAN_OPTIONS 
-d$HTCACHECLEAN_DAEMON_INTERVAL \
             -i -p$HTCACHECLEAN_PATH -l$HTCACHECLEAN_SIZE
}

stop_htcacheclean() {
     pkill -P 1 -f "htcacheclean.* -p$HTCACHECLEAN_PATH " 2> /dev/null 
|| return 1
}


# Sanity checks. They need to occur after function declarations
[ -x $DAEMON ] || exit 0

if [ ! -x $DAEMON ] ; then
     echo "No apache-bin package installed"
     exit 0
fi

if [ -z "$PIDFILE" ] ; then
     echo ERROR: APACHE_PID_FILE needs to be defined in $APACHE_ENVVARS >&2
     exit 2
fi

if check_htcacheclean ; then
     if [ ! -d "$HTCACHECLEAN_PATH" ] ; then
             echo "htcacheclean is configured, but directory 
$HTCACHECLEAN_PATH does not exist!" >&2
             exit 2
     fi
fi



case "$1" in
   start)
     log_daemon_msg "Starting $DESC" "$NAME"
     do_start
     RET_STATUS=$?
     case "$RET_STATUS" in
         0|1)
             log_success_msg
             [ "$VERBOSE" != no ] && [ $RET_STATUS = 1 ] && 
log_warning_msg "Server was already running"
             if check_htcacheclean ; then
                 [ "$VERBOSE" != no ] && log_daemon_msg "Starting HTTP 
cache cleaning daemon" "htcacheclean"
                 start_htcacheclean
                 [ "$VERBOSE" != no ] && log_end_msg $?
             fi
             ;;
         2)
             log_failure_msg
             print_error_msg
             exit 1
             ;;
     esac
     ;;
   stop|graceful-stop)
     log_daemon_msg "Stopping $DESC" "$NAME"
     do_stop "$1"
     RET_STATUS=$?
     case "$RET_STATUS" in
         0|1)
             log_success_msg
             [ "$VERBOSE" != no ] && [ $RET_STATUS = 1 ] && 
log_warning_msg "Server was not running"
             ;;
         2)
             log_failure_msg
             print_error_msg
             exit 1
             ;;
     esac
     print_error_msg

     if check_htcacheclean ; then
         [ "$VERBOSE" != no ] && log_daemon_msg "Stopping HTTP cache 
cleaning daemon" "htcacheclean"
         stop_htcacheclean
         [ "$VERBOSE" != no ] && log_end_msg $?
     fi

     ;;
   status)
     status_of_proc -p $PIDFILE "apache2" "$NAME"
     exit $?
     ;;
   reload|force-reload|graceful)
     log_daemon_msg "Reloading $DESC" "$NAME"
     do_reload
     RET_STATUS=$?
     case "$RET_STATUS" in
         0|1)
             log_success_msg
             [ "$VERBOSE" != no ] && [ $RET_STATUS = 1 ] && 
log_warning_msg "Server was already running"
             ;;
         2)
             log_failure_msg
             print_error_msg
             exit 1
             ;;
     esac
     print_error_msg
     ;;
   restart)
     log_daemon_msg "Restarting $DESC" "$NAME"
     do_stop stop
     case "$?" in
         0|1)
             do_start
             case "$?" in
                 0)
                     log_end_msg 0
                     ;;
                 1|*)
                     log_end_msg 1 # Old process is still or failed to 
running
                     print_error_msg
                     exit 1
                     ;;
             esac
             ;;
         *)
             # Failed to stop
             log_end_msg 1
             print_error_msg
             exit 1
             ;;
     esac
     ;;
   start-htcacheclean)
     log_daemon_msg "Starting htcacheclean"
     start_htcacheclean
     log_end_msg $?
     exit $?
     ;;
   stop-htcacheclean)
     log_daemon_msg "Stopping htcacheclean"
     stop_htcacheclean
     log_end_msg $?
     exit $?
     ;;
   *)
     echo "Usage: $SCRIPTNAME 
{start|stop|graceful-stop|restart|reload|force-reload|start-htcacheclean|stop-htcacheclean}" 
 >&2
     exit 3
     ;;
esac

exit 0

# vim: syntax=sh ts=4 sw=4 sts=4 sr noet

Am 03.08.2015 um 23:57 schrieb Jochen Hein:
> Thomas Luft <thomas at die-lufts.org> writes:
>
>> I started with apachectl but there was no output at all. After the start
>> I can use the web server for some time, then suddenly and without reason
>> it crashes but the process is still there (I checked via ps -x).
> Is this after logrotate and "apachectl reload"?  Please use restart
> instead of reload...
>
> Jochen
>



More information about the users mailing list