1

Some how my Apache2 daemon /etc/init.d/apache2 became empty few days ago, As i noticed it is affecting the log rotation process in past few days.

My apache version is Apache/2.2.12 (Ubuntu)

how can i restore that script again in safe way without reinstalling the apache again, and to keep my current configuration + all virtual hosts unchanged ?

  • Add a tag with your Ubuntu version. – A.B. May 7 '15 at 12:26
  • Done, Ubuntu 9.10 – MohammedSimba May 7 '15 at 12:40
  • Wow, a non-LTS almost 6 years old release. Why not upgrade your release? at least to an LTS one. There has been 6 years of security and bug fixes to the system and its packages. – Dan May 7 '15 at 14:08
1

Open the folder /var/cache/apt/archives and find the apache deb file (apache2-common...).

Extract the file with:

dpkg -x <your_deb> /tmp/apache2

Replace your empty /etc/init.d/apache2 with /tmp/apache2/etc/init.d/apache2

If the file is not found, then you can you download a deb file here.

For older versions here or here. Take the version that fits most.

Or take this for your Ubuntu 9.10, taken from apache2-common_2.0.55-4ubuntu2.13_amd64.deb:

#!/bin/bash -e
#
# apache2       This init.d script is used to start apache2.
#           It basically just calls apache2ctl.

ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin"

#edit /etc/default/apache2 to change this.
NO_START=0

set -e
if [ -x /usr/sbin/apache2 ] ; then
    HAVE_APACHE2=1
else
    exit 0
fi

. /lib/lsb/init-functions

test -f /etc/default/rcS && . /etc/default/rcS
test -f /etc/default/apache2 && . /etc/default/apache2
if [ "$NO_START" != "0" -a "$1" != "stop" ]; then 
        [ "$VERBOSE" != "no" ] && log_warning_msg "Not starting apache2 - edit /etc/default/apache2 and change NO_START to be 0.";
        exit 0;
fi

APACHE2="$ENV /usr/sbin/apache2"
APACHE2CTL="$ENV /usr/sbin/apache2ctl"

apache_stop() {
    PID=""
    PIDFILE=""
    AP_CONF=/etc/apache2/apache2.conf

    # apache2 allows more than PidFile entry in the config but only the
    # last found in the config is used; we attempt to follow includes
    # here, but only first-level includes are supported, not nested ones

    for i in $AP_CONF `awk '$1 ~ /^\s*[Ii]nclude$/ && $2 ~ /^\// {print $2}' $AP_CONF`; do
        PIDFILE=`grep -i ^PidFile $i | tail -n 1 | awk '{print $2}'`
        if [ -e "$PIDFILE" ]; then
            PID=`cat $PIDFILE`
        fi
    done

    errors=`$APACHE2 -t 2>&1`
    if [ $? = 0 ]; then
        # if the config is ok than we just stop normaly

        if [ -n "$PID" ]
        then
            $APACHE2CTL stop

            CNT=0
            while [ 1 ]
            do
                CNT=$(expr $CNT + 1)

                [ ! -d /proc/$PID ] && break

                if [ $CNT -gt 60 ]
                then
                    if [ "$VERBOSE" != "no" ]; then
                        echo " ... failed!"
                        echo "Apache2 failed to honor the stop command, please investigate the situation by hand."
                    fi
                    return 1
                fi

                sleep 1
            done
        else
            if [ "$VERBOSE" != "no" ]; then
                echo -n " ... no pidfile found! not running?"
            fi
        fi

    else
        [ "$VERBOSE" != "no" ] && echo "$errors"

        # if we are here something is broken and we need to try
        # to exit as nice and clean as possible

        # if pidof is null for some reasons the script exits automagically
        # classified as good/unknown feature
        PIDS=`pidof apache2` || true

        REALPID=0
        # if there is a pid we need to verify that belongs to apache2
        # for real
        for i in $PIDS; do
            if [ "$i" = "$PID" ]; then
                # in this case the pid stored in the
                # pidfile matches one of the pidof apache
                # so a simple kill will make it
                REALPID=1
            fi
        done

        if [ $REALPID = 1 ]; then
            # in this case everything is nice and dandy
            # and we kill apache2
            kill $PID
        else
            # this is the worst situation... just kill all of them
            #for i in $PIDS; do
            #   kill $i
            #done
            # Except, we can't do that, because it's very, very bad
            if [ "$PIDS" ] && [ "$VERBOSE" != "no" ]; then
                                echo " ... failed!"
                    echo "You may still have some apache2 processes running.  There are"
                    echo "processes named 'apache2' which do not match your pid file,"
                    echo "and in the name of safety, we've left them alone.  Please review"
                    echo "the situation by hand."
                        fi
                        return 1
        fi
    fi
}

# Stupid hack to keep lintian happy. (Warrk! Stupidhack!).
case $1 in
    start)
        [ -f /etc/apache2/httpd.conf ] || touch /etc/apache2/httpd.conf
        # ssl_scache shouldn't be here if we're just starting up.
        [ -f /var/run/apache2/ssl_scache ] && rm -f /var/run/apache2/*ssl_scache*
        # /var/run and /var/lock could be on a tmpfs
        [ ! -d /var/run/apache2 ] && mkdir /var/run/apache2
        [ ! -d /var/lock/apache2 ] && mkdir /var/lock/apache2
        # Make sure /var/lock/apache2 has the correct permissions
        chown www-data /var/lock/apache2

        log_begin_msg "Starting apache 2.0 web server..."
        if $APACHE2CTL startssl; then
                        log_end_msg 0
                else
                        log_end_msg 1
                fi
    ;;
    stop)
        log_begin_msg "Stopping apache 2.0 web server..."
        if apache_stop; then
                        log_end_msg 0
                else
                        log_end_msg 1
                fi
    ;;
    reload)
        log_begin_msg "Reloading apache 2.0 configuration..."
        if $APACHE2CTL graceful $2 ; then
                        log_end_msg 0
                else
                        log_end_msg 1
                fi
    ;;
    restart | force-reload)
        log_begin_msg "Forcing reload of apache 2.0 web server..."
        if ! apache_stop; then
                        log_end_msg 1
                fi
        if $APACHE2CTL startssl; then
                        log_end_msg 0
                else
                        log_end_msg 1
                fi
    ;;
    status)
        exit 4
    ;;
    *)
        echo "Usage: /etc/init.d/apache2 start|stop|restart|reload|force-reload" >&2
        exit 2
    ;;
esac
  • Didn't find it there :( awstats_6.9~dfsg-1ubuntu3.9.10.1_all.deb libc6_2.10.1-0ubuntu19_amd64.deb libc6-dev_2.10.1-0ubuntu19_amd64.deb libc6-i386_2.10.1-0ubuntu19_amd64.deb libc-bin_2.10.1-0ubuntu19_amd64.deb libc-dev-bin_2.10.1-0ubuntu19_amd64.deb libnet-xwhois-perl_0.90-3_all.deb libopie-dev_2.40~dfsg-0ubuntu1.9.10.1_amd64.deb lock partial rsync_3.0.6-1ubuntu1.1_amd64.deb vsftpd_2.2.0-1ubuntu2.1_amd64.deb – MohammedSimba May 7 '15 at 12:44
  • OMG Ubuntu 9.10 :\ – A.B. May 7 '15 at 12:46
  • Historical Version i know :), unfortunately no i don't have it. – MohammedSimba May 7 '15 at 12:48
  • I found another daemon on the server name as apache2.2, but i am not sure if it is the same version or not!! – MohammedSimba May 7 '15 at 12:55
  • 1
    I replaced the file, and it worked, many thanks guys A.B. , muru , for your time and your support :) – MohammedSimba May 8 '15 at 16:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.