Two instances of Apache on the same server
Dotan Shavit
dotan at shavitos.com
Wed Oct 6 13:48:38 IST 2010
On Tuesday, October 05, 2010 15:42:10 Gabor Szabo wrote:
> 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.
Why ?
What's wrong with vserver ?
Or plain chroot ?
#
>
> 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 <apache at suse.de>, 2001
> # Peter Poeml <apache at 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 at cs.huji.ac.il
> http://mailman.cs.huji.ac.il/mailman/listinfo/linux-il
More information about the Linux-il
mailing list