#!/bin/bash -e # Control a lisp image started via detachtty. # Usage: start-stop-lisp-image image-name (start|stop|attach|swank|kill) # Originally ucwctl by Marco Baringer . # Modified by Andreas Fuchs . PROGNAME=$1 ; shift DETACHTTY=/usr/bin/detachtty source /etc/lisp-start.d/$PROGNAME export HOME=/home/$RUN_AS/ USER=`whoami` case $USER in 'root') exec su $RUN_AS -c "$0 '$PROGNAME' $@" ;; "$RUN_AS") ;; *) echo "Can run this only as $RUN_AS or superuser. exiting..." exit 1 ;; esac case "$1" in 'start') mkdir -p $VARROOT mkdir -p $LOGROOT touch $LOGROOT/$PROGNAME.dribble $LOGROOT/$PROGNAME.detachtty chown $RUN_AS $LOGROOT $VARROOT chown $RUN_AS $LOGROOT/$PROGNAME.dribble $LOGROOT/$PROGNAME.detachtty export HOME=/home/$RUN_AS/ start-stop-daemon --quiet -d $ABROOT --pidfile $VARROOT/$PROGNAME.pid --exec $DETACHTTY -u $RUN_AS --start \ -- --dribble-file $LOGROOT/$PROGNAME.dribble \ --log-file $LOGROOT/$PROGNAME.detachtty \ --pid-file $VARROOT/$PROGNAME.pid \ $VARROOT/$PROGNAME.socket \ $LISP_LOAD ;; 'stop') $SUDO attachtty $VARROOT/$PROGNAME.socket \ --eval "(sb-ext:quit)" 2>/dev/null >/dev/null || \ rm -f $VARROOT/$PROGNAME.socket 2>/dev/null start-stop-daemon --quiet --pidfile $VARROOT/$PROGNAME.pid --startas detachtty -u $RUN_AS --signal 3 --stop ;; 'swank') $SUDO attachtty $VARROOT/$PROGNAME.socket \ --eval '(let ((*debug-io* (make-broadcast-stream))) (cl:require :swank) (funcall (intern "CREATE-SERVER" :swank) :dont-close t :address "'$SWANKADDR'" :port '"$SWANKPORT))" ;; 'kill') kill `cat $VARROOT/$PROGNAME.pid` rm $VARROOT/$PROGNAME.socket ;; 'attach') [ -e $VARROOT/$PROGNAME.socket ] && tail -30 $LOGROOT/$PROGNAME.dribble $SUDO attachtty $VARROOT/$PROGNAME.socket ;; *) echo "Usage: $0 lisp-image-name (start|stop|attach|swank|kill)" esac echo -n " $PROGNAME" exit 0