-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsubmitToQueue.sh
executable file
·69 lines (56 loc) · 1.99 KB
/
submitToQueue.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/bin/bash
QUEUES=(atmpd all)
MAX_JOBS=200
QUOTA_MAX=0.95
JOB_MANAGER_DIR=/home/cvilela/jobManager/
SENDMAIL_PATH=/usr/sbin/sendmail
MY_EMAIL_ADDRESS="[email protected]" # Quotation marks necessary!
THIS_HOST=`hostname`
# First, make sure quota space is not at risk, otherwise this script will go haywire
${JOB_MANAGER_DIR}checkQuota.sh ${QUOTA_MAX}
QUOTA_IS_OVER_LIMIT=$?
# If quota is over limit and job submission is not paused, pause it and send email to me.
if [ ${QUOTA_IS_OVER_LIMIT} -ne "0" ]
then
if [ ! -f ${JOB_MANAGER_DIR}pause ]
then
touch ${JOB_MANAGER_DIR}pause
printf "Subject: [JobManager] Quota is over limit\n\nJob submission on ${THIS_HOST} is now paused as disk usage exceeded the ${QUOTA_MAX} fractinal limit.\nDelete file ${JOB_MANAGER_DIR}pause to resume.\n" | ${SENDMAIL_PATH} ${MY_EMAIL_ADDRESS}
fi
fi
# If job submission is paused exit here
if [ -f ${JOB_MANAGER_DIR}pause ]
then
exit
fi
# Get snapshot of queue
/usr/local/bin/qstat -a > ${JOB_MANAGER_DIR}queueSnapshot
for QUEUE in ${QUEUES[*]}
do
FILE=${JOB_MANAGER_DIR}${QUEUE}.list
if [ -f $FILE ]
then
# FIGURE OUT HOW MANY JOBS WANT TO SUBMIT
NTEMPSTART=`cat ${JOB_MANAGER_DIR}queueSnapshot | grep -n ${QUEUE} | awk -F':' '{print $1}'`
tail -n +${NTEMPSTART} ${JOB_MANAGER_DIR}queueSnapshot > ${JOB_MANAGER_DIR}${QUEUE}Snapshot
NTEMP=`cat ${JOB_MANAGER_DIR}${QUEUE}Snapshot | grep -n @ | tail -n +2 | head -n 1 | awk -F':' '{print $1}'`
N_RUNNING=`head ${JOB_MANAGER_DIR}${QUEUE}Snapshot -n $NTEMP | grep cvilela | wc -l`
rm ${JOB_MANAGER_DIR}${QUEUE}Snapshot
N_SUBMIT=$(($MAX_JOBS-$N_RUNNING))
echo $QUEUE $N_RUNNING $N_SUBMIT
for ((i=0; i<N_SUBMIT; i++))
do
if [ `wc -l ${FILE} | awk '{print $1}'` -eq "0" ]
then
break
fi
# Read line from file
LINE=$(head -n 1 $FILE)
# SUBMIT JOBS
/usr/local/bin/qsub -q $QUEUE $LINE
# Remove line from file
sed -i -e "1d" $FILE
done
fi
done
rm ${JOB_MANAGER_DIR}queueSnapshot