I need to run two instances of Apache on the same SuSE based server but there
is something very basic I don't manage. In order to run to servers
I'll need two pid files
to hold the two process ids. So the first thing I tried was to change
the pidfile for the existing server.

I shut down Apache and the changed  /etc/init.d/apache2
the following line:

: ${pidfile:=/var/run/httpd2.pid}

to:

: ${pidfile:=/var/run/httpd2b.pid}

The problem is that after starting the web server using

/etc/init.d/apache2 start

it still created the /var/run/httpd2.pid file and NOT the
/var/run/httpd2b.pid file.

When I tried to stop the web server:
 /etc/init.d/apache2 stop
I got:
"Shutting down httpd2 (not running) "

As an experience, then I renamed
/var/run/httpd2.pid to /var/run/httpd2b.pid
and tried to shut down the server again

/etc/init.d/apache2 stop

It printed:
Shutting down httpd2 (waiting for all children to terminate)
and then it got stuck for quite a while (20-30 sec maybe)
In the end it stopped the server but also left the
/var/run/httpd2b.pid file.

I am quite lost as looking at the /etc/init.d/apache2 script I don't know
where does it take the old name from. Not even where does it create
the pid file.


regards
  Gabor


ps. This is the /etc/init.d/apache2 script:
   ---------------------------------------------------
#!/bin/sh
#
# Copyright (c) 1996, 1997, 1998 S.u.S.E. GmbH
# Copyright (c) 1998, 1999, 2000, 2001 SuSE GmbH
# Copyright (c) 2002, 2003, (2004?) SuSE Linux AG
# Copyright (c) 2004(?), 2005, 2006, 2007, 2008 SUSE Linux Products GmbH
#
# Authors: Rolf Haberrecker <apa...@suse.de>, 2001
#          Peter Poeml <apa...@suse.de>, 2002, 2003, 2004, 2005, 2006,
2007, 2008
#
#
# /etc/init.d/apache2
#
### BEGIN INIT INFO
# Provides:                     apache apache2 httpd
# Required-Start:               $local_fs $remote_fs $network
# Should-Start:                 $named $time postgresql sendmail mysql ypclient 
dhcp radiusd
# Should-Stop:                  $named $time postgresql sendmail mysql ypclient 
dhcp radiusd
# Required-Stop:                $local_fs $remote_fs $network
# Default-Start:                3 5
# Default-Stop:                 0 1 2 6
# Short-Description:            Apache 2.2 HTTP Server
# Description:                  Start the Apache HTTP daemon
### END INIT INFO

pname=apache2
: ${sysconfdir:=/etc/$pname}
: ${apache_link:=/usr/sbin/httpd2}
: ${sysconfig_apache:=/etc/sysconfig/$pname}
: ${pidfile:=/var/run/httpd2b.pid}
: ${logdir:=/var/log/$pname}
: ${homedir:=/var/lib/$pname}

#
# load the configuration
#

#
# Note about ulimits:
# if you want to set ulimits, e.g. to increase the max number of open
file handle,
# or to allow core files, you can do so by editing /etc/sysconfig/apache2 and
# simply write the ulimit commands into that file.
# Example:
# ulimit -n 16384
# ulimit -H -n 16384
# ulimit -c unlimited
# See the output of "help ulimit" in the bash, or "man 1 ulimit".
#
test -s /etc/rc.status && . /etc/rc.status && rc_reset

. /usr/share/$pname/load_configuration
export ${!APACHE_*}

httpd_conf=${APACHE_HTTPD_CONF:-$sysconfdir/httpd.conf}

apache_bin=$(/usr/share/$pname/find_mpm 2>/dev/null)

test -L $apache_link && apache_bin=$(readlink $apache_link)

if [ -z "$APACHE_MPM" ]; then
        APACHE_MPM=${apache_bin##*-}
fi

if ! [ -x $apache_bin ]; then
        echo >&2 ${warn}$apache_bin-$APACHE_MPM is not a valid httpd2 binary.
        echo >&2 Check your APACHE_MPM setting in /etc/sysconfig/$pname. $norm
        rc_failed 5
        rc_status -v1
        rc_exit
fi

# a proper home should be set, otherwise the server might end up
# with HOME=/root and some script might try to use that
HOME=$homedir

get_server_flags()
{
        unset server_flags
        case "$action" in startssl) server_flags="-DSSL";; esac
        for i in $APACHE_SERVER_FLAGS; do
                case $i in
                -D)     ;;
                -D*)    server_flags="$server_flags $i";;
                *)      server_flags="$server_flags -D$i";;
                esac
        done
}

action="$1"
case "$action" in
    stop|try-restart|*status*|probe)
        ;;
    *)
        shift; get_server_flags
        ${get_module_list_done:=false} || /usr/share/$pname/get_module_list
&& export get_module_list_done=true
        ${get_includes:=false} || /usr/share/$pname/get_includes && export
get_includes_done=true
        ;;
esac

#
# main part
#
case "$action" in
    start*)
        if [ -e $pidfile ]; then
                $0 status &>/dev/null
                ret=$?
                if [ $ret = 1 ]; then
                                echo "Warning: found stale pidfile (unclean 
shutdown?)"
                elif [ $ret = 0 ]; then
                                echo "Apache is already running ($pidfile)"
                                rc_failed $ret
                                rc_status -v1
                                rc_exit
                fi
        fi

        echo -n "Starting httpd2 (${APACHE_MPM:-${apache_bin#*-}}) "
        cmdline=$(echo $apache_bin -f $httpd_conf $server_flags "$@")
        if eval $cmdline -t > $logdir/rc$pname.out 2>&1 ; then
                export -n ${!APACHE_*}
                eval startproc -f -t ${APACHE_START_TIMEOUT:-2} $cmdline
                ret=$?

                if test -t 1 && stty -a 2>/dev/null | grep -q -- -echo\ ; then
                        # this means that apache was still waiting for a 
passphrase to be entered
                        stty echo 2>/dev/null
                        echo;echo
                        echo >&2 An SSL passphrase has not been entered within
${APACHE_START_TIMEOUT:-<not set>} seconds.
                        echo >&2 To increase this timeout, adjust 
APACHE_START_TIMEOUT in
$sysconfig_apache .
                        # this surely means that apache won't start, despite it 
looked good
to startproc
                        killall $apache_bin
                        echo >&2 "Trying to start the server without SSL (-D 
NOSSL)."
                        $0 start "$@" -D NOSSL
                        # rc_failed 1
                        # rc_status -v1
                        # rc_exit
                else
                        rc_failed $ret
                        rc_status -v
                fi
        else
                if [ "$link" = "$base" ] ; then
                        cat $logdir/rc$pname.out
                        echo >&2
                        echo >&2 The command line was:
                        echo >&2 $cmdline
                        echo >&2
                else
                        echo -e -n "\nsee $logdir/rc$pname.out for details\n";
                fi
                rc_failed 1
                rc_status -v1
        fi
        ;;
    stop)
        echo -n "Shutting down httpd2 "
        if [ ! -f $pidfile -a -f $pidfile.rpmsave ]; then mv
$pidfile.rpmsave $pidfile; fi
        if ! [ -f $pidfile ]; then
                echo -n "(not running)"
        else
                pid=$(<$pidfile)
                kill -TERM $pid 2>/dev/null
                case $? in
                    1)  echo -n "(not running)";;
                    0)  # wait until the processes are gone (the parent is the 
last one)
                        echo -n "(waiting for all children to terminate) "
                        for ((wait=0; wait<120; wait++)); do
                                if test -f $pidfile; then
                                        usleep 500000
                                        continue
                                fi
                                if ! test -f /proc/$pid/exe; then
                                        break
                                fi
                                if test "$(readlink /proc/$pid/exe 
2>/dev/null)" = $apache_bin; then
                                        usleep 500000
                                else
                                        break
                                fi

                        done
                        ;;
                esac
        fi

        rc_status -v
        ;;
    stop-graceful)
        echo "Shutting down httpd2 gracefully (SIGWINCH)"
        if ! [ -f $pidfile ]; then
                echo -n "(not running)"
        else
                pid=$(<$pidfile)
                kill -WINCH $pid 2>/dev/null
                case $? in
                    1)  echo -n "(not running)";;
                    0)  # wait until the pidfile is gone. The parent
stays there, but closes the listen ports.
                        echo -n "(waiting for parent to close listen
ports and remove pidfile) "
                        for ((wait=0; wait<120; wait++)); do
                                if test -f $pidfile; then
                                        usleep 500000
                                        continue
                                else
                                        break
                                fi
                        done
                        ;;
                esac
        fi

        rc_status -v
        ;;
    try-restart)
        ## Do a restart only if the service was active before.
        ## Note: try-restart is now part of LSB (as of 1.9).
        ## RH has a similar command named condrestart.
        $0 status
        if test $? = 0; then
                $0 restart
        else
                rc_reset        # Not running is not a failure.
        fi
        # Remember status and be quiet
        rc_status
        ;;
    restart)
        $0 configtest "$@" || { rc_failed $?; rc_exit; }

        if $0 status &>/dev/null; then
                $0 stop
        fi
        $0 start "$@"
        # Remember status and be quiet
        rc_status
        ;;
    restart-hup)
        $0 configtest "$@" || { rc_failed $?; rc_exit; }

        if $0 status &>/dev/null; then
                echo -n "Restarting httpd2 (SIGHUP)"
                kill -HUP $(<$pidfile) || return=$rc_failed
        else
                $0 start "$@"
        fi
        # Remember status and be quiet
        rc_status -v
        ;;
    restart-graceful)
        $0 configtest "$@" || { rc_failed $?; rc_exit; }

        if $0 status &>/dev/null; then
                $0 stop-graceful "$@"
                $0 start "$@"
        else
                $0 start "$@"
        fi
        # Remember status and be quiet
        rc_status
        ;;
    reload|force-reload|graceful)
        echo -n "Reload httpd2 (graceful restart)"
        cmdline=$(echo $apache_bin -f $httpd_conf $server_flags "$@")
        if eval $cmdline -t &> $logdir/rc$pname.out; then
                killproc -USR1 $apache_bin || return=$rc_failed
                rc_status -v
        else
                if [ "$link" = "$base" ] ; then
                        echo -e -n "\n\n"
                        cat $logdir/rc$pname.out
                        echo >&2
                        echo >&2 The command line was:
                        echo >&2 $cmdline
                        echo >&2
                else
                        echo -e -n "\nsee $logdir/rc$pname.out for details\n";
                fi
                rc_failed 6
                rc_status -v1
        fi
        ;;
    status)
        if [ ! -f $pidfile -a -f $pidfile.rpmsave ]; then mv
$pidfile.rpmsave $pidfile; fi
        echo -n "Checking for httpd2: "
        # we don't use checkproc here since it is confused when we exchange
the binaries
        if ! [ -f $pidfile ]; then
                # not running
                rc_failed 3
        elif [ -s $pidfile -a -d /proc/$(<$pidfile) ]; then
                # running
                :
        else
                # stale pid file
                rc_failed 1
                #rm -f $pidfile
        fi
        rc_status -v
        ;;
    probe)
        ## Optional: Probe for the necessity of a reload,
        ## give out the argument which is required for a reload.

        for i in $httpd_conf \
          $APACHE_CONF_INCLUDE_FILES \
          $APACHE_CONF_INCLUDE_DIRS
        do
                if [ $i -nt $pidfile ]; then
                        echo reload
                        break
                fi
        done
        ;;

    conf*|test|syntax|check)
        cmdline=$(echo $apache_bin -f $httpd_conf $server_flags "$@")
        eval $cmdline -t
        rc_failed $?
        rc_exit
        ;;

    extr*)
        cmdline=$(echo $apache_bin -f $httpd_conf $server_flags "$@")
        out=$(su - nobody -c "$cmdline" 2>&1)
        case $out in
            *make_sock:\ could\ not\ bind\ to\ address*) echo Syntax: OK; 
rc_failed=0;;
            *) echo Syntax: NOT OK:; echo $out; rc_failed=1;;
        esac
        rc_exit
        ;;

    server-status)
        apache2ctl status
        ;;

    full-server-status|fullstatus)
        apache2ctl fullstatus
        ;;

    *)
    cat >&2 <<-EOF
        Usage: $0 <command> <server flags>

        where <command> is one of:
                start              - start httpd
                startssl           - start httpd with -DSSL
                stop               - stop httpd (sending SIGTERM to parent)
                try-restart        - stop httpd and if this succeeds (i.e. if
                                     it was running before), start it again.

                status             - check whether httpd is running

                restart            - stop httpd if running; start httpd
                restart-graceful   - stop httpd gracefully if running; start 
httpd
                reload|graceful    - do a graceful restart by sending a 
SIGUSR1, or
                                     start if not running
                stop-graceful      - stop httpd (sending SIGWINCH to parent)

                configtest         - do a configuration syntax test
                extreme-configtest - try to run httpd as nobody (detects more 
errors
                                     by actually loading the configuration, but 
cannot
                                     read SSL certificates)
                probe              - probe for the necessity of a reload, give
                                     out the argument which is required for a 
reload.
                                     (by comparing conf files with pidfile 
timestamp)

                full-server-status - dump a full status screen; requires lynx 
or w3m
                                     and mod_status enabled
                server-status      - dump a short status screen; requires lynx 
or w3m
                                     and mod_status enabled

                help               - this screen
        
        optional server flags are passed through to httpd.
        
        EOF
    exit 1
esac


# Inform the caller not only verbosely and set an exit status.
rc_exit

_______________________________________________
Linux-il mailing list
Linux-il@cs.huji.ac.il
http://mailman.cs.huji.ac.il/mailman/listinfo/linux-il

Reply via email to