#!/bin/sh # # WebKit application server # part of Webware for Python # www.webwareforpython.org # # /etc/init.d/webkit # # Generic init.d shell start script for Unix # # Note: You will find more sophisticated start scripts # for various Unix flavors in the StartScripts folder. # # START LOCAL CONFIGURATION # If you store this script in your Webware working directory # and create a symlink to it as /etc/init.d/webkit_appname, # it will try to guess your configuration parameters. You can # make changes either directly here or you can also override # the configuration in the Launch.py script. # The name of your Webware application: APP_NAME=`basename "$0"` # The location of the start sript: if [ -h "$0" ]; then # Get the target file if start script is given as a link: START_SCRIPT=`echo "import os;p='$0' while os.path.islink(p): p = os.path.join(os.path.dirname(p), os.readlink(p)) print p" | python` else START_SCRIPT="$0" fi # The working directory or path to WebKit: WORK_DIR=`dirname "$START_SCRIPT"` # Make sure to have the absolute path: test -d "$WORK_DIR" || exit 5 WORK_DIR=`cd "$WORK_DIR" 2>/dev/null && pwd` # The app server launch script: APP_SERVER="$WORK_DIR/AppServer" test -x "$APP_SERVER" || exit 5 # The WebKit app server log file # (you can set this in Launch.py as well): #LOG_FILE="/var/log/$APP_NAME.log" LOG_FILE="$WORK_DIR/Logs/webkit.log" # Use this extension if you want to move the last log away # (also consider using logrotate or something similar): LOG_OLD=".old" # The app server process id file # (you can set this in Launch.py as well): #PID_FILE="/var/run/$APP_NAME.pid" PID_FILE="$WORK_DIR/webkit.pid" # The user to run the app server # (you can set this in Launch.py as well). # If undefined, it will be the user # running the start script (usually root). # You should use a low-privilege account, # like the work dir owner, wwwrun or nobody. # This will use the owner of the AppServer script: WEBWARE_USER=`echo "import os,pwd; print pwd.getpwuid(os.stat('$APP_SERVER')[4])[0]" | python` # Unset the following variable if you want to store the # pid and log files as the user running the start script # (usually root) or set it if you want these files to be # written after switching to the WEBWARE_USER. LAUNCH_AS_WEBWARE="yes" # Additional options -u or -O to be passed on to Python: PYTHONOPTS= # Additional libraries to be included in the Python path: PYTHONPATH= export PYTHONPATH # END LOCAL CONFIGURATION case "$1" in start) printf "Starting $APP_NAME ... " # Keep backup of last log file: if [ "$LOG_OLD" -a -f "$LOG_FILE" ]; then if [ -s "$LOG_FILE" ]; then mv -f "$LOG_FILE" "$LOG_FILE$LOG_OLD" else rm -f "$LOG_FILE" fi fi # Check if the server is already running: if [ -f "$PID_FILE" ] ; then PID=`cat "$PID_FILE"` if [ "$PID" ]; then # Check on the command line if it is really our pid file # (MacOs has only "command", SunOS has only "args"): if (ps -o command= -p $PID 2>/dev/null \ || ps -o args= -p $PID 2>/dev/null) \ | grep -q " -i $PID_FILE "; then echo "already running" exit 0 fi fi rm -f "$PID_FILE" fi if [ -z "$WEBWARE_USER" -o "$WEBWARE_USER" = "$USER" ]; then "$APP_SERVER" $PYTHONOPTS -i "$PID_FILE" \ -d "$WORK_DIR" -o "$LOG_FILE" > /dev/null & else if [ "$LAUNCH_AS_WEBWARE" ]; then # Switch user first, then create pid and log files: CMD="\"$APP_SERVER\" $PYTHONOPTS" CMD="$CMD -i \"$PID_FILE\" -d \"$WORK_DIR\" -o \"$LOG_FILE\"" su $WEBWARE_USER -c "$CMD" > /dev/null & else # Create pid and log files first, then switch user: "$APP_SERVER" $PYTHONOPTS -i "$PID_FILE" \ -d "$WORK_DIR" -u $WEBWARE_USER >> "$LOG_FILE" 2>&1 & fi fi echo "done" ;; stop) printf "Stopping $APP_NAME ... " if [ -f "$PID_FILE" ] ; then PID=`cat "$PID_FILE"` if [ "$PID" ]; then if (ps -o command= -p $PID 2>/dev/null \ || ps -o args= -p $PID 2>/dev/null) \ | grep -q " -i $PID_FILE "; then if kill $PID > /dev/null 2>&1 ; then echo "done" else echo "error" echo "Could not kill process $PID named in $PID_FILE" exit 1 fi else echo "not running (removing stale pid file)" fi else echo "not running (removing empty pid file)" fi rm -f "$PID_FILE" else echo "not running" fi ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac