#! /bin/sh # # globus-scheduler-event-generator - Globus Scheduler Event Generator # # chkconfig: - 20 80 # description: Parse LRM events into a common log format \ # for the GRAM job manager to use ### BEGIN INIT INFO # Provides: globus-scheduler-event-generator # Required-Start: $remote_fs $time # Required-Stop: $remote_fs # Default-Stop: 0 1 2 3 4 5 6 # Short-Description: Globus Scheduler Event Generator # Description: The Globus Scheduler Event Generator service # process state from local resource managers (such as # torque or SGE) into a form that the globus-job-manager # process can easily parse. # It is part of the Globus Toolkit(tm) ### END INIT INFO # Copyright 1999-2011 University of Chicago # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # sbindir=/usr/sbin localstatedir=/var sysconfdir=/etc progname=globus-scheduler-event-generator prog=${sbindir}/${progname} test -f /etc/sysconfig/${progname} && . /etc/sysconfig/${progname} test -f ${prog} || exit 0 lockfile=/var/lock/subsys/${progname} GLOBUS_SEG_LRM_DIR="${GLOBUS_SEG_LRM_DIR:-/etc/globus/scheduler-event-generator}" full=1 if [ -n "$2" ]; then full=0 fi for lrm in "${GLOBUS_SEG_LRM_DIR}"/*; do if [ -n "$2" -a "$(basename "$lrm")" != "$2" ]; then continue fi if [ -f "$lrm" ]; then lrms="${lrms:+$lrms }$(basename $lrm)" fi done GLOBUS_SEG_PIDFMT="${GLOBUS_SEG_PIDFMT:-/var/run/${progname}-%s.pid}" GLOBUS_SEG_LOGFMT="${GLOBUS_SEG_LOGFMT:-/var/log/globus/globus-seg-%s}" start() { allrc=0 started="" failed="" for lrm in $lrms; do pidfile="$(printf "$GLOBUS_SEG_PIDFMT" "$lrm")" logdir="$(printf "$GLOBUS_SEG_LOGFMT" "$lrm")" status $lrm > /dev/null rc=$? if [ $rc -eq 0 ]; then continue fi if [ ! -d "$logdir" ]; then (umask 022; mkdir "$logdir") fi ${GLOBUS_SEG_NICE_LEVEL:+nice -n "${GLOBUS_SEG_NICE_LEVEL}"} \ "${prog}" \ -s "$lrm" \ -p "$pidfile" \ -d "$logdir" \ -b > /dev/null rc=$? if [ $rc = 0 ]; then started="${started:+${started}, }$lrm" else failed="${failed:+${failed}, }$lrm" allrc=$rc fi done if [ "$allrc" -eq 0 -a "$lrms" != "" ]; then echo "Started ${progname}${started:+ for ($started)}" touch "$lockfile" elif [ "$allrc" -eq 0 ]; then echo "$progname: no LRMS installed" elif [ "$started" = "" ]; then echo "Failed to start ${progname} for ($failed)" else echo "Some problems starting ${progname} for ($failed), but ($started) were ok" touch "$lockfile" fi return $allrc } stop() { allrc=0 stopped="" failed="" for lrm in $lrms; do pidfile="$(printf "$GLOBUS_SEG_PIDFMT" "$lrm")" logdir="$(printf "$GLOBUS_SEG_LOGFMT" "$lrm")" if [ -f "$pidfile" ]; then read pid < "${pidfile}" 2> /dev/null if [ "$pid" -gt 0 ] 2>/dev/null; then if kill -0 "${pid}" 2> /dev/null; then kill -TERM "${pid}" if sleep 1 && kill -0 "${pid}" 2>/dev/null && \ sleep 3 && kill -0 "${pid}" 2>/dev/null; then kill -KILL "${pid}" fi if kill -0 "${pid}" 2> /dev/null; then failed="${failed:+$failed, }$lrm" allrc=1 continue fi fi fi stopped="${stopped:+${stopped}, }$lrm" rm -f "${pidfile}" fi done if [ "$allrc" -eq 0 ]; then echo "Stopped ${progname}${stopped:+ for ($stopped)}" if [ "$full" -eq 1 ]; then rm -f "$lockfile" fi elif [ "$stopped" = "" ]; then echo "Failed to stop ${progname} for $failed" else echo "Some problems stopping ${progname} for $failed, but $stopped were ok" fi return $allrc } restart() { stop start } status() { _lrms="$1" running=0 stale=0 nopidfile=0 if [ "$_lrms" = "" ]; then _lrms="$lrms" fi for lrm in $_lrms; do pidfile="$(printf "$GLOBUS_SEG_PIDFMT" "$lrm")" if [ -f "$pidfile" ]; then read pid < "$pidfile" 2>/dev/null if [ "$pid" -gt 0 ] 2>/dev/null; then if ps -p "$pid" > /dev/null; then echo "$progname ($lrm) is running (pid=$pid)" running=1 else echo "Stale PID file for $progname ($lrm)" stale=1 fi fi else echo "$progname ($lrm) is not running" fi done if [ "$stale" -ne 0 ]; then return 1 fi if [ "$running" -eq 0 -a "$stale" -eq 0 -a "${lrms}" != "" -a -f "${lockfile}" ]; then echo "Stale lock file for $progname" return 2 fi if [ "$running" -eq 1 ]; then return 0 else echo "$progname not running, no LRMs installed" return 3 fi } case "$1" in start) start ;; stop) stop ;; restart) restart ;; reload) exit 0 ;; force-reload) restart ;; status) status ;; condrestart|try-restart) status || exit 0 restart ;; *) echo "Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}" exit 2 ;; esac