Two instances of Apache on the same server
Tom Goren
tom at tomgoren.com
Wed Oct 6 12:14:26 IST 2010
Sorry for the crude question, but why would you want to do this?
Are you trying to run to different versions of apache for testing or for
some specific application need?
What advantages do two separate instances of the actual apache process
present over a multiple virtual host configurations? This usually covers 99%
of usage cases.
Just curious,
Tom.
On Tue, Oct 5, 2010 at 3:42 PM, Gabor Szabo <szabgab at gmail.com> 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.
>
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.cs.huji.ac.il/pipermail/linux-il/attachments/20101006/f5959756/attachment-0001.html>
More information about the Linux-il
mailing list