#! /bin/sh # Start and stop toolkit lite administered idzebra script for Debian. # change runlevels using update-rc.d test -x /usr/bin/zebrasrv || exit 0 test -x /usr/bin/zebraidx || exit 0 test -f /etc/default/zebra || exit 0 source /etc/default/zebra # Now sourced from /etc/default/zebra ZEBRA_USER=zebra ZEBRA_GROUP=zebra #ZEBRA_CONF_FILE=/etc/zebra.conf #ZEBRA_LOG_DIR=/var/log/zebra #ZEBRA_PID_DIR=/var/run/zebra #ZEBRA_TMP_DIR=/var/tmp/zebra ZEBRA_DIRS="/home/marc/projects/alvis" ZEBRA_INDEX_DIRS="data" # set socket connection method #ZEBRA_SOCKET="tcp:@:210" ZEBRA_SOCKET="unix:db/socket" # define display message display_ZEBRA_message(){ echo "Usage:" echo " As root:" echo -n " /etc/init.d/zebra {start|stop|reload|force-reload|restart}" echo " [/path/to/root/dir]" echo " As root or $ZEBRA_USER:" echo " /etc/init.d/zebra {index|reindex} [/path/to/root/dir [sub/dir] ]" } # make sure we are root or $ZEBRA_USER ZEBRA_CURR_USER=`whoami`; if [ $ZEBRA_CURR_USER != $ZEBRA_USER -a $ZEBRA_CURR_USER != "root" ] ; then display_ZEBRA_message ; echo " Error: you are not root or $ZEBRA_USER"; exit 1; fi # perform usual init.d daemon services case "$1" in start) # make sure we are root if [ `whoami` != root ]; then display_ZEBRA_message ; echo " Error: you are not root"; exit 1; fi # read zebra dir from command line if [ $2 ] ; then ZEBRA_DIRS=$2 fi # loop through all entries defined in /etc/zebra.conf for d in $ZEBRA_DIRS; do echo -n "Starting zebra: " echo -n "$d " ; if [ ! -f $d/db/zebra.cfg ] ; then echo ""; echo " Error: config file $d/db/zebra.cfg not found"; continue; fi if [ ! -f $d/db/lock/zebrasrv.pid ] ; then start-stop-daemon --start --quiet --background --pidfile $d/db/lock/zebrasrv.pid --exec /usr/bin/zebrasrv -- -w $d -u $ZEBRA_USER -c db/zebra.cfg -l db/server.log $ZEBRA_SOCKET ; # check for running zebra not performed #sleep 1 #if [ -f $d/db/lock/zebrasrv.pid ] ; then # echo -n "started " #cat $d/db/lock/zebrasrv.pid # echo -n " " #else # echo -n "error " #fi else echo -n "already running " fi echo done #ps -C zebrasrv | grep `cat $d/db/lock/zebrasrv.pid` ;; stop) # make sure we are root if [ `whoami` != root ]; then display_ZEBRA_message ; echo " Error: you are not root"; exit 1; fi # read zebra dir from command line if [ $2 ] ; then ZEBRA_DIRS=$2 fi # loop through all entries defined in /etc/zebra.conf for d in $ZEBRA_DIRS; do echo -n "Stopping zebra: " echo -n "$d " ; if [ ! -f $d/db/zebra.cfg ] ; then echo ""; echo " Error: config file $d/db/zebra.cfg not found"; continue; fi if [ -f $d/db/lock/zebrasrv.pid ] ; then start-stop-daemon --stop --quiet --oknodo --pidfile $d/db/lock/zebrasrv.pid ; #sleep 1 #if ps -C zebrasrv | grep `cat $d/db/lock/zebrasrv.pid` ; then # kill -9 `cat $d/db/lock/zebrasrv.pid` # echo -n "-9 " #fi #if [ -f $d/db/lock/zebrasrv.pid ] && ps -C zebrasrv | grep `cat $d/db/lock/zebrasrv.pid` ; then # echo -n "error " #else # echo -n "stopped " #fi #if [ -f $d/db/lock/zebrasrv.pid ] ; then #rm -f $d/db/lock/zebrasrv.pid #echo -n "removed PID file" #fi else echo -n "already dead " fi echo done #ps -C zebrasrv | grep `cat $d/db/lock/zebrasrv.pid` ;; restart|reload|force-reload) # make sure we are root if [ `whoami` != root ]; then display_ZEBRA_message ; echo " Error: you are not root"; exit 1; fi $0 stop $2 #sleep 1 $0 start $2 ;; reindex|index) # make sure that indexing is done as user $ZEBRA_USER if test `whoami` != $ZEBRA_USER; then su -s /bin/sh -c "$0 $*" $ZEBRA_USER exit 0 fi # read zebra dir from command line if [ $2 ] ; then ZEBRA_DIRS=$2 fi for d in $ZEBRA_DIRS; do # allow all scripts to be called with one specific entrie # directory as third argument if [ ! -f $d/db/zebra.cfg ] ; then echo -n "Indexing zebra: " echo "$d " echo " Error: config file $d/db/zebra.cfg not found"; continue; fi if [ $3 ] ; then # only indexing one additionally directory ZEBRA_INDEX_DIRS=$3; if [ ! -d $d/$ZEBRA_INDEX_DIRS ] ; then #$0 ; # trigger user info echo " Error: there is no directory $3"; echo " in zebra dir $d"; echo " Can not index $d/$ZEBRA_INDEX_DIRS"; exit 1; fi if ( echo $ZEBRA_INDEX_DIRS | grep "^/" ) ; then #$0 ; # trigger user info echo " Error: third argument $3"; echo " must not contain leading slash"; exit 1; fi echo -n "Indexing zebra: " echo -n "$d " (cd $d ; # initalization and commiting db to get a fresh slate for DIR in $ZEBRA_INDEX_DIRS ; do echo -n "$DIR " zebraidx -L -l db/index.log -c db/zebra.cfg update $DIR ; done zebraidx -l db/index.log -c db/zebra.cfg commit ; ) echo else # indexing a whole entrie - findZEBRA_INDEX_DIRD makes the work # findZEBRA_INDEX_DIRS "$d" ; echo -n "Indexing zebra: " echo -n "$d " (cd $d ; # initalization and commiting db to get a fresh slate zebraidx -l db/index.log -c db/zebra.cfg init ; for DIR in $ZEBRA_INDEX_DIRS ; do echo -n "$DIR " zebraidx -L -l db/index.log -c db/zebra.cfg update $DIR ; done zebraidx -l db/index.log -c db/zebra.cfg commit ; ) echo fi done ;; *) display_ZEBRA_message ; exit 1; esac exit 0