#!/bin/sh # The purpose of this shell script is to extract the ALPS resId for the # current batch job (under which we are running). Ideally, we would not # relegate such a function to a script; rather, we would extract this # value directly from the ALPS "reservations" file. However, we do not # know the file structure used for the "reservations" file and this # structure is not locally available. Then, in addition, we have the # complication that as of the instantiation date of this script, the # user command interface to ALPS is somewhat unreliable. So, to keep # the load module fairly simple, we use this script. APSTAT=/usr/bin/apstat GREP=/usr/bin/grep AWK=/usr/bin/awk SLEEP=/bin/sleep ECHO=/bin/echo # If the old variable still is being set, use it. if [ "${BATCH_PARTITION_ID}" != "" ] then ${ECHO} ${BATCH_PARTITION_ID} exit 0 fi # Extract the batch job ID directly from the environment, if available. jid=${BATCH_JOBID:--1} if [ $jid -eq -1 ] then # Otherwise, parse it from the PBS/Torque environmental variable. jid=${PBS_JOBID:--1} if [ $jid = "-1" ] then ${ECHO} -1 exit 0 fi jid=`${ECHO} $jid | ${AWK} -F\. '{print $1}'` fi # Next, let the ALPS user command interface read the "reservations" # file; but let's not be too hasty about reporting failure. resId="" count=0 while [ "$resId" = "" ] do # We're in a while loop, so skip the delay on the first trip. if [ $count -gt 0 ] then ${SLEEP} 1 fi # Try to get the ALPS resId. resId=`${APSTAT} -r | ${GREP} $jid | ${AWK} '{print $1}'` # Give up after 10 tries. count=`expr $count + 1 ` if [ $count -ge 10 ] then break fi done # If we still don't have it after 10 attempts, then, I reckon that it # just wasn't meant to be. if [ "$resId" = "" ] then ${ECHO} 2 exit 0 fi ${ECHO} $resId exit 0