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 <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 _______________________________________________ Linux-il mailing list Linux-il@cs.huji.ac.il http://mailman.cs.huji.ac.il/mailman/listinfo/linux-il