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