Jim, many thanks!! Do you think you can make this into a HOW-TO on Zope.org? Jim Cain wrote:
All,
There have been some questions on here recently on how to start and stop Zope. The system I've created may not be the fanciest, but it works for me.
It all begins with the standard SysV script in /etc/rc.d/init.d, which calls zstart and zstop as appropriate. This is fairly standard, and I won't bore you with the contents of my script here.
zstart and zstop both read configuration files in /etc/zope.d/*, which currently contains two files: env and instances. The env file is sourced to redefine defaults that are set in zstart and zstop. The instances file describes how to start z2.py. I run ZServer on Red Hat 6.0 from behind Apache.
Here is env:
---begin--- # /etc/zope.d/env # # Set environment variables that differ from default
ZOPE_USER=www ZOPE_BASE=/usr/local/Zope ---end---
Here is instances:
---begin--- # /etc/zope.d/instances # # instance_name ftp_port n_threads use_manager # polonius 8022 2 0 gertrude 8023 2 1 ---end---
Here is zstart:
---start--- #!/bin/bash
# # Set default environment #
ENV_FILE=/etc/zope.d/env INSTANCES_FILE=/etc/zope.d/instances ZOPE_USER=nobody ZOPE_BASE=/opt/Zope CGIBIN_BASE=/home/httpd/cgi-bin INSTANCE_BASE=/home/httpd/zope PS="ps wax" PYTHON=/usr/local/bin/python
# # process command line options #
while getopts "c:" opt do case "$opt" in i) if [ -r "$OPTARG" ] then INSTANCES_FILE=$OPTARG else echo "$0: cannot read $OPTARG" exit 1 fi ;;
e) if [ -r "$OPTARG" ] then ENV_FILE=$OPTARG else echo "$0: cannot read $OPTARG" exit 1 fi ;;
?) echo "Usage: $0 [-i instances-file] [-e environment-file]" exit 3 ;; esac done
# # Read environment file #
. "$ENV_FILE"
# # is_running instance_name #
is_running () { if $PS | grep -v grep | grep "z2\.py.*$1" > /dev/null 2>&1 then echo yes else echo no fi }
# # start_instance instance_name ftp_port n_threads use_manager #
start_instance () { if [ "$4" = "0" ] then manager= else manager="-Z $INSTANCE_BASE/$1/manager.pid" fi
su $ZOPE_USER -c \ "$PYTHON $ZOPE_BASE/z2.py \ -p $CGIBIN_BASE/$1/Zope.cgi \ -w '' -m '' -f $2 -t $3 $manager\ INSTANCE_HOME=$INSTANCE_BASE/$1 \ >> $INSTANCE_BASE/$1/z2.log 2>&1 &" }
############################################################################### # # Main program #
awk 'substr($1, 0, 1) != "#" {print $0}' $INSTANCES_FILE | ( while read line; do set $line if [ "`is_running $1`" = "yes" ] then echo "$0: Warning: instance $1 already running" else start_instance $1 $2 $3 $4 fi done) ---end---
Here is zstop:
---begin--- #!/bin/bash
# # Set default environment #
ENV_FILE=/etc/zope.d/env INSTANCES_FILE=/etc/zope.d/instances ZOPE_USER=nobody ZOPE_BASE=/usr/local/Zope CGIBIN_BASE=/home/httpd/cgi-bin INSTANCE_BASE=/home/httpd/zope PS="ps wax" PYTHON=/usr/local/bin/python
# # process command line options #
while getopts "c:" opt do case "$opt" in i) if [ -r "$OPTARG" ] then INSTANCES_FILE=$OPTARG else echo "$0: cannot read $OPTARG" exit 1 fi ;;
e) if [ -r "$OPTARG" ] then ENV_FILE=$OPTARG else echo "$0: cannot read $OPTARG" exit 1 fi ;;
?) echo "Usage: $0 [-i instances-file] [-e environment-file]" exit 3 ;; esac done
# # Read environment file #
. "$ENV_FILE"
# # stop_instance instance_name use_manager #
stop_instance () { if [ "$2" = "0" ] then pidfile=pcgi.pid else pidfile=manager.pid fi
kill `cat "$INSTANCE_BASE/$1/var/Z2.pid"` # > /dev/null 2>&1 }
############################################################################### # # Main program #
awk 'substr($1, 0, 1) != "#" {print $0}' $INSTANCES_FILE | ( while read line; do set $line stop_instance $1 done) ---end---
Hope some people find this helpful. If it's helpful enough, maybe I'll submit it as a HOWTO on Zope.org.
Cheers, Jim
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
-- Chris McDonough - Digital Creations, Inc. Publishers of Zope - http://www.zope.org