#!/bin/sh # #+-#+-#+-#-+-#+-#+-#-+-#+-#+-#-+-#+-#+-#-+-#+-#+-#-+-#+-#+-#-+-#+-#+-#-+-# # # $SGE_ROOT/util/execd_template # # DO NOT EDIT THIS FILE - this file is used as an template # Don't change the markers #+-#+-#+-# and "#-#-#-#" , they will be removed # #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#- # # SGE/SGEEE startup script # #___INFO__MARK_BEGIN__ ########################################################################## # # The Contents of this file are made available subject to the terms of # the Sun Industry Standards Source License Version 1.2 # # Sun Microsystems Inc., March, 2001 # # # Sun Industry Standards Source License Version 1.2 # ================================================= # The contents of this file are subject to the Sun Industry Standards # Source License Version 1.2 (the "License"); You may not use this file # except in compliance with the License. You may obtain a copy of the # License at http://gridengine.sunsource.net/Gridengine_SISSL_license.html # # Software provided under this License is provided on an "AS IS" basis, # WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, # WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, # MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. # See the License for the specific provisions governing your rights and # obligations concerning the Software. # # The Initial Developer of the Original Code is: Sun Microsystems, Inc. # # Copyright: 2001 by Sun Microsystems, Inc. # # All Rights Reserved. # ########################################################################## #___INFO__MARK_END__ # # This script can be called with the following arguments: # # start start execution daemon # stop Terminates the execution daemon # and the shepherd. This only works if the execution daemon # spool directory is in the default location. # softstop do not kill the shepherd process # # Unix commands which may be used in this script: # cat cut tr ls grep awk sed basename # # This script requires the script $SGE_ROOT/util/arch # PATH=/bin:/usr/bin:/sbin:/usr/sbin #--------------------------------------------------------------------------- # The following lines provide the necessary info for adding a startup script # according to the Linux Standard Base Specification (LSB) which can # be found at: # # http://www.linuxfoundation.org/spec/booksets/LSB-Core-generic/LSB-Core-generic/initscrcomconv.html # ### BEGIN INIT INFO # Provides: GENSGESVC # Required-Start: $network $remote_fs # Required-Stop: # Default-Start: 3 5 # Default-Stop: 0 1 2 6 # Description: start Grid Engine execd ### END INIT INFO #--------------------------------------------------------------------------- SGE_ROOT=GENROOT; export SGE_ROOT SGE_CELL=GENCELL; export SGE_CELL SGE_QMASTER_PORT=GENSGE_QMASTER_PORT; export SGE_QMASTER_PORT SGE_EXECD_PORT=GENSGE_EXECD_PORT; export SGE_EXECD_PORT unset CODINE_ROOT GRD_ROOT COD_CELL GRD_CELL count=0 while [ ! -d "$SGE_ROOT" -a $count -le 120 ]; do count=`expr $count + 1` sleep 1 done ARCH=`$SGE_ROOT/util/arch` # library path setting required only for architectures where RUNPATH is not supported case $ARCH in #ENFORCE_SHLIBPATH#sol*|linux-*) #ENFORCE_SHLIBPATH# ;; *) shlib_path_name=`$SGE_ROOT/util/arch -lib` old_value=`eval echo '$'$shlib_path_name` if [ x$old_value = x ]; then eval $shlib_path_name=$SGE_ROOT/lib/$ARCH else eval $shlib_path_name=$old_value:$SGE_ROOT/lib/$ARCH fi export $shlib_path_name ;; esac #--------------------------------------------------------------------------- # DetectSMFService - sets service to a mask maching the name # $1 ... name # DetectSMFService() { name=$1 service="" if [ "$noSMF" = true ]; then return fi #Otherwise we try is it's available of the system if [ -f /lib/svc/share/smf_include.sh ]; then . /lib/svc/share/smf_include.sh smf_present if [ $? -ne 0 ]; then return fi else return fi #Check we have cluster_name file if [ ! -r "$SGE_ROOT/$SGE_CELL/common/cluster_name" ]; then echo "Error: could not find $SGE_ROOT/$SGE_CELL/common/cluster_name!" exit $SMF_EXIT_ERR_CONFIG fi #Cluster name must be unique SGE_CLUSTER_NAME=`cat $SGE_ROOT/$SGE_CELL/common/cluster_name 2>/dev/null` service="svc:/application/sge/$name:$SGE_CLUSTER_NAME" #Check if service exists /usr/bin/svcs $service > /dev/null 2>&1 if [ $? -ne 0 ]; then #No such service found in the system service="" fi } #--------------------------------------------------------------------------- # ShutdownSMF # ShutdownSMF() { if [ -z "$service" ]; then #We don't have any such SMF service we use normal Shutdown return fi pid=`/usr/bin/svcs -l -p $service | grep "/sge_execd$" | grep -v "^grep" | awk '{print $2}'` if [ -n "$pid" ]; then usingSMF="true" /usr/sbin/svcadm disable -st $service fi } #--------------------------------------------------------------------------- # Shutdown # Send SIGTERM (default) or signal $3 to process name $1 with pid in file $2 # Shutdown() { name=$1 pidfile=$2 signal="-TERM" if [ $# = 3 ]; then signal="-$3" fi if [ -f $pidfile ]; then pid=`cat $pidfile` $utilbin_dir/checkprog $pid $name > /dev/null if [ "$?" = 0 ]; then kill $signal $pid return $? fi fi } #--------------------------------------------------------------------------- # GetPathToBinaries # echo the name of the bin_dir on this system # The check is fullfilled if we can access the qstat binary # echo "none" if we can't determine the binary path GetPathToBinaries() { cfgname=$SGE_ROOT/$SGE_CELL/common/bootstrap base=none if [ -f $cfgname ]; then base=`grep binary_path $cfgname | awk '{ print $2 }'` if [ -f $base/qstat ]; then : elif [ -f $SGE_ROOT/util/arch ]; then arch=`$SGE_ROOT/util/arch` if [ -f $base/$arch/qstat ]; then base=$base/$arch fi fi fi echo $base } #--------------------------------------------------------------------------- # GetAdminUser # echo the name of the admin user on this system # echo "root" if admin user retrieval fails GetAdminUser() { cfgname=$SGE_ROOT/$SGE_CELL/common/bootstrap user=none if [ -f $cfgname ]; then user=`grep admin_user $cfgname | awk '{ print $2 }'` fi if [ `echo $user|tr "[A-Z]" "[a-z]"` = "none" ]; then user=root fi echo $user } #--------------------------------------------------------------------------- # GetPathToUtilbin # echo the path to the binaires in utilbin # The check is fullfilled if we can access the "gethostname" binary # echo "none" if we can't determine the binary path # GetPathToUtilbin() { base=none if [ -f $SGE_ROOT/util/arch ]; then utilbindir=$SGE_ROOT/utilbin arch=`$SGE_ROOT/util/arch` if [ -f $utilbindir/$arch/gethostname ]; then base=$utilbindir/$arch fi fi echo $base } #--------------------------------------------------------------------------- # GetExecdSpoolDir # get the execution daemon spooling dir from configuration GetExecdSpoolDir() { EXECD_SPOOL_DIR=`$bin_dir/qconf -sconf $UQHOST | grep execd_spool_dir | awk '{ print $2 }'` if [ "$EXECD_SPOOL_DIR" = "" ]; then EXECD_SPOOL_DIR=`$bin_dir/qconf -sconf | grep execd_spool_dir | awk '{ print $2 }'` fi } #--------------------------------------------------------------------------- usage() { echo "Grid Engine start/stop script. Valid parameters are:" echo "" echo " (no parameters): start execution daemon if applicable" echo " \"start\" dto." echo " \"stop\" shutdown local Grid Engine processes and jobs" echo " \"softstop\" shutdown local Grid Engine processes (no jobs)" echo " \"-nosmf\" force no SMF" echo "" echo "Only one of the parameters \"start\", \"stop\" or \"softstop\" is allowed." echo echo "Default argument is \"start\" for all components." echo "Default for \"stop\" is shutting down all components." echo exit 1 } #--------------------------------------------------------------------------- # MAIN Procedure # if [ "$#" -gt 2 -o "$1" = "-h" -o "$1" = "help" ]; then usage fi startup=true execd=true softstop=false noSMF=false for i in $*; do if [ "$i" = start ]; then startup=true elif [ "$i" = stop ]; then startup=false elif [ "$i" = softstop ]; then startup=false softstop=true elif [ "$i" = -nosmf ]; then noSMF=true else usage fi done bin_dir=`GetPathToBinaries` if [ "$bin_dir" = "none" ]; then echo "can't determine path to Grid Engine binaries" exit 1 fi utilbin_dir=`GetPathToUtilbin` if [ "$utilbin_dir" = "none" ]; then echo "can't determine path to Grid Engine utility binaries" exit 1 fi # HOST is the aliased name (SGE name) # UQHOST is the local host name (unqualified name) HOST=`$utilbin_dir/gethostname -aname` UQHOST=`$utilbin_dir/gethostname -name | cut -f1 -d.` DetectSMFService execd if [ "$startup" = true ]; then #We want to use smf if [ \( -z "$SMF_FMRI" -o "$SMF_FMRI" != "$service" \) -a -n "$service" ]; then svcadm enable -st $service exit $? fi # execution daemon is started on this host! if [ "$SGE_EXECD_PORT" = "" ]; then ping_port=`$utilbin_dir/getservbyname -number sge_execd` else ping_port=$SGE_EXECD_PORT fi echo " starting sge_execd" exec 1>/dev/null 2>&1 $bin_dir/sge_execd [ $? -eq 0 -a -d /var/lock/subsys ] && touch /var/lock/subsys/sgeexecd #Don't exit until daemon is up $bin_dir/qping -info "$HOST" "$ping_port" execd 1 > /dev/null 2>&1 ret=$? loop=0 while [ $ret -ne 0 -a $loop -ne 61 ]; do sleep 1 $bin_dir/qping -info "$HOST" "$ping_port" execd 1 > /dev/null 2>&1 ret=$? loop=`expr $loop + 1` done if [ $loop -eq 61 ]; then echo "Execd did not start in 61 seconds!" exit 1 fi exit 0 else # Shutdown execution daemon if [ $execd = true ]; then GetExecdSpoolDir execd_spool_dir=$EXECD_SPOOL_DIR/$UQHOST usingSMF=false echo " Shutting down Grid Engine execution daemon" #We try to use SMF ShutdownSMF #Otherwise we use normal shutdown if [ "$usingSMF" != true ]; then # Send SIGTERM to execd Shutdown sge_execd $execd_spool_dir/execd.pid ret=$? if [ -f /var/lock/subsys/sgeexecd ]; then uid=`$utilbin_dir/uidgid -uid` if [ "$uid" = "0" -a "$ret" = "0" ]; then rm -f /var/lock/subsys/sgeexecd >/dev/null 2>&1 else echo "Can't shut down execd!" exit 1 fi fi fi if [ $softstop = false ]; then # Send SIGTERM to all shepherds (send SIGTSTP which is converted to SIGTERM by shepherd) for jobid in `ls $execd_spool_dir/active_jobs`; do echo " Shutting down Grid Engine shepherd of job $jobid" Shutdown sge_shepherd $execd_spool_dir/active_jobs/$jobid/pid TSTP done fi fi fi