#!/bin/sh # Copyrights : CNRS # Author : Oleg Lodygensky # Acknowledgment : XtremWeb-HEP is based on XtremWeb 1.8.0 by inria : http://www.xtremweb.net/ # Web : http://www.xtremweb-hep.org # # This file is part of XtremWeb-HEP. # # XtremWeb-HEP is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # XtremWeb-HEP is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with XtremWeb-HEP. If not, see . # # # # File : xtremweb # # Purpose : This starts, stops or restarts the xtremweb parts # # This is called by xtremweb.server and xtremweb.worker # # Params : [start | stop | restart] [PARTNAME] [ROOTDIR] [--jvmopts] # PARTNAME possible values : # xtremweb.server # xtremweb.worker # xtremweb.rpc # ROOTDIR : installation path # --jvmopts tells to optimize java (this may be source to troubles :( ) # # config file : ../conf/.conf # pid file : /var/run/.pid # lock file : /var/lock/subsys/ # # return : please, refer to ./xtremwebconf.sh # # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> # ** DO NOT EDIT ** # ** This file is generated by install script ** # <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< # # # XWHEP part name # PROG=$1 # # loading default values # ROOTDIR=$2 shift shift #[ "$ROOTDIR" = "./.." ] && ROOTDIR=`pwd`/.. #cd $ROOTDIR #ROOTDIR=`pwd` if [ "X$ROOTDIR" = "X" ]; then echo "`date` [`uname -n` $PROG] ERROR : ROOTDIR is not set" exit $ERRUSAGE fi . $ROOTDIR/bin/xtremwebconf.sh > /dev/null 2>&1 #. $ROOTDIR/bin/xtremwebconf.sh RETVAL=$? if [ $RETVAL -ne 0 ] ; then echo "`date` [`uname -n` $PROG] ERROR : please check $LOGFILE" exit $RETVAL fi # # return code # RETVAL=$ERROK if [ ! -f $CFGFILE ]; then echo "$PROG: $CFGFILE not found" exit $ERRFILE fi # # This starts xtremweb part as daemon # return : 0 on success # 3 if already running # start () { [ "X$LOGGERLEVEL" = "Xdebug" ] && echo $JAVA echo "`date` [`uname -n` $PROG] INFO : checking launch url" XWUPGRADEURL=`grep -i -E "^launcherurl.*" $CFGFILE | cut -d '=' -f 2` if [ "X" != "X$XWUPGRADEURL" ] ; then rm -f /tmp/xwbinary wget --timeout=5 --tries=1 -o /dev/null -O /tmp/xwbinary $XWUPGRADEURL if [ $? -ne 0 ] ; then echo "`date` [`uname -n` $PROG] ERROR : can't retrieve $XWUPGRADEURL" if [ "X$PROG" = "Xxtremweb.server" ] ; then exit $ERRCONNECTION fi fi if [ -f /tmp/xwbinary/xtremweb.jar ] ; then diff $LIBDIR/xtremweb.jar /tmp/xwbinary > /dev/null RC=$? rm -f /tmp/xwbinary if [ $RC -ne 0 ] ; then echo "`date` [`uname -n` $PROG] ERROR : $XWUPGRADEURL does not match this version" exit $ERRCONNECTION fi fi else echo "`date` [`uname -n` $PROG] WARNING : no launcher URL defined" fi if [ "X$1" = "Xconsole" ]; then if [ "X$PROG" = "Xxtremweb.server" ] ; then echo "`date` [`uname -n` $PROG] INFO : launching SmartSockets hub" rm -f $IBISLOG touch $IBISPIDFILE > /dev/null 2>&1 [ $? -ne 0 ] && IBISPIDFILE=/tmp/ibishub.pid touch $IBISLOG > /dev/null 2>&1 [ $? -ne 0 ] && IBISLOG=/tmp/ibishub.log $IBISHUB > $IBISLOG 2>&1 & IBISPID=$! echo $IBISPID > $IBISPIDFILE sleep 2 kill -18 $IBISPID if [ $? -ne 0 ] ; then echo "Can't start SmartSockets Hub" cat $IBISLOG exit 1 fi cat $CFGFILE | grep -i -v smartsocketshubaddr > /tmp/$PROG.tmp HUBADDR=`cat $IBISLOG | grep "Hub running on" | cut -d ":" -f 2` echo "smartsocketshubaddr=$HUBADDR" >> /tmp/$PROG.tmp mv /tmp/$PROG.tmp $CFGFILE fi export JAVA_HOME=$JAVAHOME && export LD_LIBRARY_PATH=$LD_LIBRARY_PATH && PATH=$JAVAPATH:$PATH && $JAVA kill -9 `cat $IBISPIDFILE` rm -f $IBISPIDFILE return $? fi touch $LOGFILE [ "X$XWUSER" != "X" ] && chown $XWUSER $LOGFILE if [ -f $PIDFILE ]; then kill -s SIGINFO `cat $PIDFILE` > /dev/null 2>&1 if [ $? -eq 0 ]; then echo "`date` [`uname -n` $PROG] ERROR : $PROG already running : can't start" >> $LOGFILE RETVAL=$ERRSTATE return $RETVAL fi fi rm -f $PIDFILE rm -f $IBISPIDFILE rm -f $LOCKFILE if [ ! -d $SCRATCH ]; then echo "`date` [`uname -n` $PROG] ERROR : $SCRATCH is not a valid directory : can't start" >> $LOGFILE RETVAL=$ERRFILE return $RETVAL fi cd $SCRATCH if [ $? -ne 0 ]; then echo "`date` [`uname -n` $PROG] ERROR : can't cd to $SCRATCH : can't start" >> $LOGFILE RETVAL=$ERRFILE return $RETVAL fi # # Try to determine SU usage... # SU="" if [ "X$XWUSER" != "X" ]; then MINUS="" su -l $XWUSER -c exit > /dev/null 2>& 1 if ( [ $? -eq 0 ] ); then SU="su -l $XWUSER" else su $XWUSER -c exit - > /dev/null 2>&1 if ( [ $? -eq 0 ] ); then SU="su $XWUSER" MINUS=" -" else su - $XWUSER -c "exit" > /dev/null 2>&1 if ( [ $? -eq 0 ] ); then SU="su - $XWUSER" else echo "Can't determine SU usage :(" >> $LOGFILE return $ERRUSER fi fi fi fi echo "`date` [`uname -n` $PROG] INFO : starting $PROG" >> $LOGFILE # # Try to determine default shell for user $XWUSER # USHELL="unknown" [ -x /bin/ksh ] && USHELL="/bin/ksh" [ -x /bin/zsh ] && USHELL="/bin/zsh" [ -x /bin/csh ] && USHELL="/bin/csh" [ -x /bin/tcsh ] && USHELL="/bin/tcsh" [ -x /bin/sh ] && USHELL="/bin/sh" [ -x /bin/bash ] && USHELL="/bin/bash" if [ "X$SU" != "X" ]; then # SU="$SU -s $USHELL -c" SU="$SU -c" fi rm -f $SCRIPTTMPFILE touch $SCRIPTTMPFILE touch $PIDFILE touch $IBISPIDFILE # echo "$JAVA >> $LOGFILE 2>&1 & " >> $SCRIPTTMPFILE # echo "echo \$! >> $PIDFILE" >> $SCRIPTTMPFILE # if [ "X$XWUSER" != "X" ]; then chown $XWUSER $SCRIPTTMPFILE chown $XWUSER $PIDFILE chown $XWUSER $IBISPIDFILE chown $XWUSER $CFGFILE fi chmod uog+x $SCRIPTTMPFILE rm -f $IBISLOG touch $IBISLOG [ "X$XWUSER" != "X" ] && chown $XWUSER $IBISLOG echo "Ibis Log file : $IBISLOG" >> $LOGFILE echo "#!$USHELL" >> $SCRIPTTMPFILE echo "#`date` [`uname -n` $PROG]" >> $SCRIPTTMPFILE if [ "X$PROG" = "Xxtremweb.server" ] ; then cat >> $SCRIPTTMPFILE < $IBISLOG 2>&1 & IBISPID=\$! sleep 2 kill -18 \$IBISPID if [ \$? -ne 0 ] ; then echo "Can't start SmartSockets Hub" cat $IBISLOG exit 1 fi echo \$IBISPID > $IBISPIDFILE sleep 2 TMPCFG=/tmp/$PROG.conf.tmp cat $CFGFILE | grep -i -v smartsocketshubaddr > \$TMPCFG HUBADDR=\`cat $IBISLOG | grep "Hub running on" | cut -d ":" -f 2\` echo smartsocketshubaddr=\$HUBADDR >> \$TMPCFG mv -f \$TMPCFG $CFGFILE EOF fi case $USHELL in "/bin/sh"|"/bin/bash"|"/bin/ksh"|"/bin/zsh" ) echo "Script : $SCRIPTTMPFILE" >> $LOGFILE echo "export JAVA_HOME=$JAVAHOME && export LD_LIBRARY_PATH=$LD_LIBRARY_PATH && PATH=$JAVAPATH:$PATH && $JAVA >> $LOGFILE 2>&1 & $MINUS" >> $SCRIPTTMPFILE echo "echo \$! > $PIDFILE" >> $SCRIPTTMPFILE ;; "/bin/csh"|"/bin/tcsh" ) echo "Script : $SCRIPTTMPFILE" >> $LOGFILE echo "setenv JAVA_HOME $JAVAHOME && setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH && PATH $JAVAPATH:$PATH && $JAVA >>& $LOGFILE & $MINUS" >> $SCRIPTTMPFILE echo "echo \$! > $PIDFILE" >> $SCRIPTTMPFILE ;; * ) echo "Can't find any shell :(" >> $LOGFILE return $ERRUSER ;; esac echo $SU $SCRIPTTMPFILE $SU $SCRIPTTMPFILE if [ $? -ne 0 ] ; then echo "[`date`] $PROG ERROR : can't launch ($SU $SCRIPTTMPFILE)" >> $LOGFILE return $ERRUSAGE fi # PID=`ps auxwww | grep $MAINCLASS | grep $XWUSER | grep -v grep | sed "s/[[:space:]][[:space:]]*/ /g" | cut -d " " -f 2` # if [ "X$PID" = "X" ] ; then # echo "$PROG : launch error" # echo "[`date`] $PROG : launch error" >> $LOGFILE # return $ERRSTATE # fi # echo "PID=$PID" # echo $PID > $PIDFILE touch $LOCKFILE $CMDNICE return $ERROK } # # This stops xtremweb part # return : 0 on success # 3 if not running # stop(){ MYPID=$$ echo "`date` [`uname -n` $PROG] INFO : stopping" >> $LOGFILE if [ ! -f $PIDFILE ]; then echo "`date` [`uname -n` $PROG] ERROR : $PROG not running : can't stop ($PIDFILE not found)" >> $LOGFILE RETVAL=$ERRSTATE return $RETVAL fi # # process ids # PIDS="" # # parent process ids # PPIDS="" PPIDSTMP="/tmp/xw.$TMPNAME.ppids" PIDSTMP="/tmp/xw.$TMPNAME.pids" rm -f $PPIDSTMP rm -f $PIDSTMP # # retreive parent process ids # [ "X$XWUSER" = "X" ] && XWUSER=$USER ps -fwww -u $XWUSER | grep $PROG | grep -v grep | grep -v stop| while read user pid ppid cmd do rm -f $PPIDSTMP [ "X$PPIDS" = "X" ] && PPIDS=$pid && echo $PPIDS > $PPIDSTMP [ "X$ppid" = "X1" ] && continue PPIDS="$PPIDS $ppid" echo $PPIDS | grep $pid > /dev/null [ $? -ne 0 ] && PPIDS="$PPIDS $pid" echo "$PPIDS" > $PPIDSTMP done # # retreive process ids # # PPIDS=`cat $PPIDSTMP` # echo "PPIDS=$PPIDS" ps -f -u $XWUSER | while read user pid ppid cmd do PP_FOUND=0 for i in `cat $PPIDSTMP` ; do if [ $i = $ppid ] ; then PP_FOUND=1 break fi done [ $PP_FOUND -eq 0 ] && continue rm -f $PIDSTMP PIDS="$PIDS $pid" echo "$PIDS" > $PIDSTMP done for i in `cat $PIDSTMP $PPIDSTMP` ; do echo "`date` [`uname -n` $PROG] INFO : kill -9 $i " >> $LOGFILE 2>&1 kill -9 $i >> $LOGFILE 2>&1 done kill -9 `cat $IBISPIDFILE` rm -f $PPIDSTMP rm -f $PIDSTMP rm -f $LOCKFILE rm -f $PIDFILE rm -f $IBISPIDFILE echo "`date` [`uname -n` $PROG] INFO : stopped" >> $LOGFILE return $ERROK } # # This restarts xtremweb part # restart(){ stop $* start $* return $? } # # This retreives the status # return : always 0 # status(){ if [ -f $PIDFILE ] ; then echo "$PROG is running" else echo "$PROG is not running" fi return 0 } ################################################### # Main ################################################### # # Parse command line parameters # case "$ACTION" in console) start console $PARAMS RETVAL=$? ;; start) start $PARAMS RETVAL=$? ;; status) status exit 0 ;; stop) stop RETVAL=$? ;; restart) restart $PARAMS RETVAL=$? ;; *) echo "Usage : $0 {console | start | stop | restart | status} [--jvmopts]" exit $ERRUSAGE esac echo -n "`date` [`uname -n` $PROG] INFO : $PROG $action " if [ $RETVAL -eq 0 ] ; then echo "[OK]" elif [ $RETVAL -eq 130 ] ; then echo "[INTERRUPTED]" else echo "[FAILED] : $RETVAL" fi exit $RETVAL # # End Of File #