Sophie

Sophie

distrib > Mandriva > 10.2 > x86_64 > by-pkgid > 2710f656e6073b1b4917317ddd1fe829 > files > 12

torque-1.2.0-1mdk.src.rpm

#!/bin/sh 
#
#    PBS init script
#
#	$1 can be:
#	    start   - start PBS
#	    stop    - terminate PBS
#	    restart - terminate and start PBS
#	    status  - report PBS deamon pids
# chkconfig:
#
# description: The Portable Batch System (PBS) is a flexible batch software 
# processing system developed at NASA Ames Research Center. It operates on 
# networked, ulti-platform UNIX environments, including heterogeneous clusters 
# of workstations, supercomputers, and massively parallel systems. 
#
# processname: pbs_server pbs_mom pbs_sched
# config: /etc/pbs.conf
#
# Source the library functions
. /etc/rc.d/init.d/functions

if [ -f /etc/pbs.conf ] ; then
. /etc/pbs.conf
else
  echo "***"
  echo "*** Can not find /etc/pbs.conf"
  echo "***"
  exit 1
fi

update_pids() {
  if [ -f ${pbs_home}/server_priv/server.lock ] ; then
    pbs_server_pid=`cat ${pbs_home}/server_priv/server.lock`
  else
    pbs_server_pid=-1
  fi
  if [ -f ${pbs_home}/mom_priv/mom.lock ] ; then
    pbs_mom_pid=`cat ${pbs_home}/mom_priv/mom.lock`
  else
    pbs_mom_pid=-1
  fi
  if [ -f ${pbs_home}/sched_priv/sched.lock ] ; then
    pbs_sched_pid=`cat ${pbs_home}/sched_priv/sched.lock`
  else
    pbs_sched_pid=-1
  fi
}

# check_started - check if a particular pid is the program which is expected.
#                 pbs stores the pid of the currently running incarnation of 
#                 itself.  This function is used to see if that pid is correct 
#		  program.
# 	$1 - the pid
# 	$2 - the program name (pbs_server pbs_mom pbs_sched)
#
# return value: 0 - program is already running
#		1 - program is not running
#
: check_started
check_started() {

  ps_out=`ps -p $1 -o args | tail +2`

  if [ -z "${ps_out}" ]  ; then
    return 1;
  fi

# strip out everything except executable name
  prog_name=`echo ${ps_out} | awk '{print $1}' | awk -F/ '{print $NF}'`

  if [ ${prog_name} = $2 ] ; then
    return 0;
  fi

  return 1;
}

# check_prog - this function checks to see if a prog is still running.  It will
#              get the pid out of the prog.lock file and run check_started 
#	       on that pid.
#
#	$1 is either "server" "mom" or "sched"
#
# return value: 0 - program is still running
#		1 - program is not running
#
: check_prog
check_prog() {
  pid_file=${pbs_home}/${1}_priv/${1}.lock

  if [ -f ${pid_file} ] ; then
    pid=`cat ${pid_file}`
    if [ -n "${pid}" ] ; then
      if check_started "${pid}" "pbs_${1}" ; then
	return 0
      else
	return 1
      fi
    else
      return 1
    fi
  fi
  # Since the pid file does not exist, PBS has never been run
  return 1
}

# check if prog exist : pbs_server, pbs_mom, pbs_sched 
: check_exist_prog
check_exist_prog() {
  prog_exist=${pbs_exec}/sbin/${1}
if [ -x ${prog_exist} ] ; then
	return 0
   else
	return 1
fi
}

: main code

case "$1" in
  start)
	update_pids
    if check_exist_prog "pbs_server" ; then
    if [ "${start_server}" -gt 0 ] ; then
		if check_prog "server" ; then
		gprintf "PBS Server already running pid: ${pbs_server_pid}\n"
		else
			gprintf "Starting PBS Server:"
			if [ -r ${pbs_home}/server_priv/serverdb ] ; then
			daemon ${pbs_exec}/sbin/pbs_server
			RETVAL=$?
                        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/pbs_server
			echo
			else
			daemon ${pbs_exec}/sbin/pbs_server -t create
                        RETVAL=$?
                        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/pbs_server
			echo
			fi
		fi
	else
	echo "no PBS Server installed"
    fi
    fi
  
    if check_exist_prog "pbs_mom" ; then
    if [ "${start_mom}" -gt 0 ] ; then
		if check_prog "mom" ; then
		gprintf "PBS mom already running pid: ${pbs_mom_pid}\n"
		else
		gprintf "Starting PBS Mom:"
		daemon ${pbs_exec}/sbin/pbs_mom
		RETVAL=$?
		[ $RETVAL -eq 0 ] && touch /var/lock/subsys/pbs_mom
		echo
		fi
    fi
    fi
    
    if check_exist_prog "pbs_sched" ; then
    if [ "${start_sched}" -gt 0 ] ; then
		if check_prog "sched" ; then
		gprintf "PBS schedular already running pid: ${pbs_sched_pid}\n" 
		else
		gprintf "Starting PBS Sched:"
		daemon ${pbs_exec}/sbin/pbs_sched
		RETVAL=$?
                [ $RETVAL -eq 0 ] && touch /var/lock/subsys/pbs_sched
		echo
		fi
    fi
    fi
  ;;
  stop)
    update_pids 
    if check_exist_prog "pbs_server" ; then
    if [ "${start_server}" -gt 0 ] ; then
      if check_prog "server" ; then
	gprintf "Shutting down PBS Server:" 
	killproc pbs_server
	RETVAL=$?
	[ $RETVAL -eq 0 ] && rm -rf /var/lock/subsys/pbs_server
	echo
	# ${pbs_exec}/bin/qterm
	# gprintf "PBS server - was pid: ${pbs_server_pid}\n"
      fi
    fi
    fi

    if check_exist_prog "pbs_mom" ; then
    if [ "${start_mom}" -gt 0 ] ; then
      if check_prog "mom" ; then
	gprintf "Shutting down PBS Mom:"
	killproc pbs_mom
	RETVAL=$?
	[ $RETVAL -eq 0 ] && rm -rf /var/lock/subsys/pbs_mom
	echo
	# kill ${pbs_mom_pid}
	# gprintf "PBS mom - was pid: ${pbs_mom_pid}\n"
      fi
    fi
    fi

    if check_exist_prog "pbs_sched" ; then
    if [ "${start_sched}" -gt 0 ] ; then
      if check_prog "sched" ; then
	gprintf "Shutting down PBS Sched:"
	killproc pbs_sched
	RETVAL=$?
	[ $RETVAL -eq 0 ] && rm -rf /var/lock/subsys/pbs_sched
	echo
	# kill ${pbs_sched_pid} 
	# gprintf "PBS sched - was pid: ${pbs_sched_pid}\n"
      fi
    fi
    fi
  ;;
  restart)
    echo "Restarting PBS"
    $0 stop
    $0 start
    RETVAL=$?
  ;;
  status)
    update_pids
    if check_exist_prog "pbs_server" ; then
    if [ "${start_server}" -gt 0 ] ; then
      if check_prog "server" ; then
	gprintf "PBS Server is pid ${pbs_server_pid}"
	echo
      else
	echo "PBS Server is not running."
      fi
    fi
    fi
    
    if check_exist_prog "pbs_mom" ; then
    if [ "${start_mom}" -gt 0 ] ; then
      if check_prog "mom" ; then
	gprintf "PBS Mom is pid ${pbs_mom_pid}"
	echo
      else
	echo "PBS Mom is not running"
      fi
    fi
    fi
    
    if check_exist_prog "pbs_sched" ; then
    if [ "${start_sched}" -gt 0 ] ; then
      if check_prog "sched" ; then
	gprintf "PBS Sched is pid ${pbs_sched_pid}"
	echo
      else
	echo "PBS Sched is not running"
      fi
    fi
    fi
  ;;
  reload)
      update_pids
	if check_exist_prog "pbs_server" ; then
	gprintf "Re-reading pbs_server config file"
	killproc pbs_server -HUP
        RETVAL=$?
	fi

	if check_exist_prog "pbs_mom" ; then
	gprintf "Re-reading pbs_mom config file"
	killproc pbs_mom -HUP
	RETVAL=$?
	fi
	
	if check_exist_prog "pbs_sched" ; then
	gprintf "Re-reading pbs_sched config file"
	killproc pbs_sched -HUP
        RETVAL=$?
	fi
  ;;
  *)
    gprintf "Usage: pbs {start|stop|restart|status}\n"
    exit 1
esac