* I think you might be missing an INSTANCE_HOME parameter here, something like
# what we'd like but won't recognize instance home # exec /usr/bin/python $ZOPE_BASE/z2.py -z $ZOPE_BASE -u $USER \ # -w $HTTP_PORT -f $FTP_PORT -t $THREADS -Z $MANAGER \ # -l $INSTANCE_HOME$ZOPE_LOGFILE \ INSTANCE_HOME=$INSTANCE_HOME \ # -D "$@" $INSTANCE_HOME/var/startup.log &
or export the INSTANCE_HOME
* Are you shure you want to start Zope in debug mode?
* You might want to check http://zope.org/Documentation/Books/ZopeBook/2_6Edition/MaintainingZope.stx , I put some (very much simpler) startup scripts there
* Finally, the upcoming Zope 2.7 should behave much better wrt this (if thats any help to you :-))
- peter.
Sean Duffy wrote:
Hi,
These are probably more shell scripting issues, but I'm hoping that some scripter with an agile mind will show me the error of my ways, so here goes.
I have borrowed a script from the zope site and modified it for my purposes, and it 'sort of' works. The issues are:
Can't seem to get the Instance-Home stuff to work right without local
start scripts in each directory. Right below the $INSTANCE_HOME/start
is the line I'd like to use to simplify the management of the instances.
Can't get stop to work right. First 'stop' is not an instance, then the first instance does appear to get stopped, but it errors on the other two.
I get a 'start0' for the value of $WAIT in the starting text display. (should just be a big fat zero or one!)
And for some reason, the script dumps the entire local environment to the display before it does anything; any ideas why?
All constructive criticism welcome, and I'll take some flames (high of 22 today).
System is RedHat-9.0 Zope-2.6.2 Python-2.2.3
Zope is installed in /usr/local/zope Instances are /var/zope-sites/
Here's the script:
#!/bin/sh
# /etc/init.d/zope-instances
#
# Starts or stops multiple instances of zope one by one or all at ones.
# Configuration is done all through one configuration file # /etc/zope-instances.conf which defines the location of the data-files,
# the user to run the instance, FTP portnrs, number of threads and if
the # zdaemon should be used (to start a new instance should the one crash) # all configurable per instance.
#
# Steps for creating and running a new instance:
# - start with a normal working (fresh) distribution of Zope
# ... snip ...
# - edit /etc/zope-instances.conf to run the new instance as you
desire
# - start the new instance (/etc/init.d/zope-instances start
instance-name)
#
# Note: this script is only tested for Red Hat distributions. # Locations of scripts may vary from various distributions. # Use at own risk.
#
# created: Chaim Zax (chaim at climbing.nl)
# version 0.02, dd. 29-3-'03
# version 0.02a, stuffduff 20-01-'04
INSTANCES_CONF="/etc/zope-instances.conf"
DEFAULT_USER="www-data"
ZOPE_BASE="/usr/local/zope" PS="ps wax"
# Log- and pid-files ZDAEMON_PIDFILE="/var/zProcessManager.pid" ZDAEMON_LOGFILE="/var/Z2_debug.log" ZOPE_PIDFILE="/var/Z2.pid" ZOPE_LOGFILE="/var/Z2.log" ZOPE_DEBUGFILE="/var/zope-debug.log"
# Function for showing help-text how to use this script
helpText ()
{
echo "Starts or stops multiple instances of zope one by one or all at
ones."
echo
echo " zope-instance [start/stop/restart/info/kill] [instance-name]
[-w] [-h]"
echo
echo " start/stop : starts or stops one or all
zope-instances"
echo " restart : restarts one or all zope-
instances"
echo " info : gets instance info as well as their
current status"
echo " kill : kills one or all zope-instances,
even if orphaned"
echo " USE THIS ONLY WHEN ZOPE SPINS OUT
OF CONTROL"
echo " instance-name : if not provided or 'all' indicates
all instances,"
echo " else acts only on the given
instance"
echo " -w : Do not wait for instance to
startup"
echo " -h : This help-text"
}
startZope () { startingAndStopping "start" $1 $2 }
stopZope () { startingAndStopping "stop" $1 "-" }
restartZope () { startingAndStopping "restart" $1 $2 }
infoZope () { startingAndStopping "info" $1 "-" }
killZope () { if [[ $1 == "all" ]]; then killAll else killInstance $1 fi }
# Start one or more instances depending of $1 and $2 startingAndStopping () { MODE=$1 # mode is 'start', 'restart', 'stop' or 'info' INSTANCE=$2 WAIT=$3
if [ ! -e $INSTANCES_CONF ]; then echo "ERROR: No configuration file '$INSTANCES_CONF'" exit 1 fi
SETUP="no" # sift through the configuration file, one line at a time while read LINE; do if [[ ${LINE::1} != "#" ]]; then set $LINE
if [[ $1 != "" ]]; then
# starts, restarts or stops all instances (one per loop)
if [[ $INSTANCE == "all" ]]; then
STARTUP_MODE=$8
if [[ $STARTUP_MODE == 'start' || ($MODE != 'start' && $MODE
!= 'restart') ]]; then
actionOnInstance $MODE $1 $2 $3 $4 $5 $6 $7 $8 $WAIT
fi
SETUP="done"
# starts or stops only the provided instance and breaks out of
the loop
elif [[ $INSTANCE == $1 ]]; then
actionOnInstance $MODE $1 $2 $3 $4 $5 $6 $7 $8 $WAIT
SETUP="done"
break
fi
fi
fi
done < $INSTANCES_CONF
# the instance-name doesn't correspond to the ones in the configuration file if [[ $SETUP == "no" ]]; then echo "ZOPE-INSTANCE NOT STARTED/STOPPED! No instance found with name'$INSTANCE'. Check the configuration file ($INSTANCES_CONF)." echo "Possible options are:" echo "- all (for starting and stopping all zope instances below)" cat $INSTANCES_CONF | awk '{ print "- " $1 }' | grep -v "#" fi }
actionOnInstance () {
MODE=$1
INSTANCE_NAME=$2
WAIT=$10
if [[ $MODE == "start" ]]; then startInstance $2 $3 $4 $5 $6 $7 $8 $9 $WAIT elif [[ $MODE == "restart" ]]; then stopInstance $2 $3 $4 $5 $6 $7 $8 sleep 1 startInstance $2 $3 $4 $5 $6 $7 $8 $9 $WAIT elif [[ $MODE == "stop" ]]; then stopInstance $2 $3 $4 $5 $6 $7 $8 $9 elif [[ $MODE == "info" ]]; then infoOnInstance $2 $3 $4 $5 $6 $7 $8 $9 else echo "Error: Unknown action on instance $1" fi }
# with name, data directory, user, HTTP portnr, FTP portnr, number of threads, manager startInstance () { INSTANCE_NAME=$1 INSTANCE_HOME=$2 USER=$3 HTTP_PORT=$4 FTP_PORT=$5 THREADS=$6 USE_MANAGER=$7 STARTUP_MODE=$8 WAIT=$9
# check for a running or starting instance, abort if found if [[ "`isHumming $INSTANCE_NAME`" = "yes" ]]; then if [ -e $INSTANCE_HOME$ZOPE_PIDFILE ]; then echo "Zope-instance '$INSTANCE_NAME' is already running." else echo "Zope-instance '$INSTANCE_NAME' is already being started." fi
else
# remove old pid files in case of a previous crash
rm -f $INSTANCE_HOME$ZDAEMON_PIDFILE
rm -f $INSTANCE_HOME$ZOPE_PIDFILE
echo "Starting Zope-instance: $INSTANCE_NAME..."
echo " data: '$INSTANCE_HOME', user: '$USER'"
echo " http: $HTTP_PORT, ftp: $FTP_PORT, threads: $THREADS,"
echo " use manager: $USE_MANAGER, default: $STARTUP_MODE, wait:
$WAIT"
# create the necessary startup parameters
if [[ $USER == "default" ]]; then
USER=$DEFAULT_USER
fi
if [[ $USE_MANAGER == "yes" ]]; then
MANAGER="1"
else
MANAGER="0"
fi
if [[ $ZOPE_DEBUGFILE != "" ]]; then
STUPID_LOG_FILE="$INSTANCE_HOME$ZOPE_DEBUGFILE"
Z_DEBUG_MODE=1
export STUPID_LOG_FILE Z_DEBUG_MODE
fi
# what works $INSTANCE_HOME/start &
# what we'd like but won't recognize instance home # exec /usr/bin/python $ZOPE_BASE/z2.py -z $ZOPE_BASE -u $USER \ # -w $HTTP_PORT -f $FTP_PORT -t $THREADS -Z $MANAGER \ # -l $INSTANCE_HOME$ZOPE_LOGFILE \ # -D "$@" $INSTANCE_HOME/var/startup.log &
# wait for the instance to start up. WAIT="1" if [[ $WAIT == 1 ]]; then echo -n " starting" waitForStartup $INSTANCE_NAME fi echo fi }
stopInstance () { INSTANCE_NAME=$1 INSTANCE_HOME=$2
# check for a running or starting instance, abort if found if [[ "`isHumming $INSTANCE_NAME`" = "yes" ]]; then if [ ! -e $INSTANCE_HOME$ZOPE_PIDFILE ]; then echo "Zope-instance '$INSTANCE_NAME' is being started. Wait for it to start up before stopping it, or kill ALL zope processes with the 'kill-all' option (not recommended)." echo else
# If we're running the zdaemon, kill it first to prevent it from # re-spawning a new zope-instance.
if [ -e $INSTANCE_HOME$ZDAEMON_PIDFILE ]; then
echo -n "Stopping ZDaemon for $INSTANCE_NAME... "
ZDAEMON_PID=`cat $INSTANCE_HOME$ZDAEMON_PIDFILE`
kill $ZDAEMON_PID 2/dev/null && true
echo "done"
fi
# Kill the actual zope-instance if [ -e $INSTANCE_HOME$ZOPE_PIDFILE ]; then echo -n "Stopping Zope-instance: $INSTANCE_NAME... " ZOPE_PID=`cat $INSTANCE_HOME$ZOPE_PIDFILE | cut -d' ' -f2` kill $ZOPE_PID 2/dev/null && true echo "done" else echo "Zope-instance '$INSTANCE_NAME' was not running" fi
cleanUp $INSTANCE_HOME fi
else echo "Zope-instance '$INSTANCE_NAME' was not running" cleanUp $INSTANCE_HOME fi }
# remove all floating pid and socket files
cleanUp () {
INSTANCE_HOME=$1
# Do some cleaning up. if [ -e $INSTANCE_HOME$ZDAEMON_PIDFILE ]; then rm -f $INSTANCE_HOME$ZDAEMON_PIDFILE fi if [ -e $INSTANCE_HOME$ZOPE_PIDFILE ]; then rm -f $INSTANCE_HOME$ZOPE_PIDFILE fi
}
infoOnInstance () { INSTANCE_NAME=$1 INSTANCE_HOME=$2 USER=$3 HTTP_PORT=$4 FTP_PORT=$5 THREADS=$6 USE_MANAGER=$7 STARTUP_MODE=$8 WAIT=$9
echo "Status of Zope-instance: $INSTANCE_NAME" echo " data: '$INSTANCE_HOME', user: '$USER'" echo " http: $HTTP_PORT, ftp: $FTP_PORT, threads: $THREADS," echo " use manager: $USE_MANAGER, default: $STARTUP_MODE, wait: $WAIT" echo -n " current status: "
# check if an instance of z2.py is running with the correct instance-name HUMMING=`isHumming $INSTANCE_NAME`
# check for a running zdaeom with the correct pid if [ -e $INSTANCE_HOME$ZDAEMON_PIDFILE ]; then ZDAEMON_PID=`cat $INSTANCE_HOME$ZDAEMON_PIDFILE`
if [[ "`ps wax | awk '{ print $1 }' | grep $ZDAEMON_PID`" != "" ]]; then ZDAEMON="running" else ZDAEMON="crashed" fi else ZDAEMON="off_or_starting" fi
# check for a running zope with the correct pid if [ -e $INSTANCE_HOME$ZOPE_PIDFILE ]; then ZOPE_PID=`cat $INSTANCE_HOME$ZOPE_PIDFILE | cut -d' ' -f2`
if [[ "`ps wax | awk '{ print $1 }' | grep $ZOPE_PID`" != "" ]]; then ZOPE="running" else ZOPE="crashed" fi else ZOPE="off_or_starting" fi
# lets make sense of what we have found if [[ $ZOPE == "running" ]]; then if [[ $ZDAEMON == "running" ]]; then echo "RUNNING (ZDaemon running as well)" else echo "RUNNING (without ZDaemon)" fi elif [[ $ZOPE == "crashed" ]]; then if [[ $ZDAEMON == "running" ]]; then echo "RESTARTING after crash (if all is well)" else if [[ $HUMMING = "yes" ]]; then echo "CRASHED, but zope is still humming (sorry, i can't figure it out)" else echo "CRASHED, AND NOT BEING RESTARTED (ZDaemon not running)" fi fi elif [[ $ZOPE == "off_or_starting" ]]; then if [[ $HUMMING = "yes" ]]; then echo "BEING STARTED" else echo "NOT RUNNING" fi else echo "ERROR IN SCRIPT (sorry)" fi
echo }
isHumming () { INSTANCE_NAME=$1 HUMMING=`$PS | grep -v grep | grep "z2\.py.*$INSTANCE_NAME"`
if [[ $HUMMING != "" ]]; then echo "yes" else echo "no" fi }
waitForStartup () {
INSTANCE_NAME=$1
TIMEOUT=300
while [[ $TIMEOUT 0 && "`isStarted $INSTANCE_NAME`" == "no" ]]; do sleep 1 echo -n '.' TIMEOUT=`expr $TIMEOUT - 1` done
if [[ "`isStarted $INSTANCE_NAME`" == "yes" ]]; then echo "done" else echo "FAILED" fi }
isStarted () {
INSTANCE_NAME=$1
if [ -e $INSTANCE_HOME$ZOPE_PIDFILE ]; then ZOPE_PID=`cat $INSTANCE_HOME$ZOPE_PIDFILE | cut -d' ' -f2`
if [[ $ZOPE_PID != "" ]]; then echo "yes" else echo "no" fi else echo "no" fi }
killAll () {
kill `ps wax | grep z2.py | grep -v grep | awk '{ print $1 }'`
}
killInstance () { INSTANCE_NAME=$1 kill `$PS | grep -v grep | grep "z2\.py.*$INSTANCE_NAME" | awk '{ print $1 }'` }
# --- main ----
if [[ $# 1 && $2 != "-w" ]]; then INSTANCE=$2 else INSTANCE="all" fi
if [[ $2 == "-w" || $3 == "-w" ]]; then
WAIT=0
else
WAIT=1 fi
# these are our options... case $1 in "start") startZope $INSTANCE $WAIT ;; "stop") stopZope $INSTANCE ;; "restart") restartZope $INSTANCE $WAIT ;; "info") infoZope $INSTANCE ;; "kill") killZope $INSTANCE ;; "-h") helpText exit 0 ;; *) echo "Unknown option '$1'" helpText exit 1
esac
And here's the conf:
# /etc/zope-instances.conf
#
# Configuration file to run zope with mulitple instances. This file is
used # with the /etc/init.d/zope-instances script to start and stop the zope # instances described below.
#
# name, data directory, user, http portnr, ftp portnr, number of
threads, manager, default
dev /var/zope-sites/dev zope 8082 8022 1 no start qat /var/zope-sites/qat zope 8081 - 2 no start prd /var/zope-sites/prd zope 8080 - 4 yes start
_______________________________________________
Zope-Dev maillist - [EMAIL PROTECTED]
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists - http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )
smime.p7s
Description: S/MIME Cryptographic Signature
_______________________________________________ Zope-Dev maillist - [EMAIL PROTECTED] http://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope )