#!/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
#