75 lines
2.3 KiB
Bash
Executable File
75 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
folder=serial
|
|
nodelist=compute01,compute04,compute07,compute10,compute11,compute12
|
|
|
|
TIMESTR=`date +"%s"`
|
|
DBNAME="${folder}_${TIMESTR}"
|
|
NODES=(1)
|
|
ESIZE=(A B C AB AC BC ABC)
|
|
|
|
pwd=`pwd`
|
|
|
|
thrds=1
|
|
|
|
QSIZE=1
|
|
|
|
for e in "${ESIZE[@]}"
|
|
do
|
|
echo "----------------------- ${e} Exploits -----------------------" >> ./slurm_reports/"$folder"/sync_data.txt
|
|
|
|
SKIP_FLAG=0
|
|
#Dispatch the job and get the output ("Submitted batch job <jobid>
|
|
JOB=`sbatch --nodelist="$nodelist" --exclusive ag_run.sh "$DBNAME" "$e"`
|
|
#Pull the jobid
|
|
JOB=`echo "$JOB" | grep -oP '(?<=job )[^ ]*'`
|
|
|
|
#Output will be stored as this format
|
|
FILE="./slurm_reports/job.${JOB}.out"
|
|
ERR="./slurm_reports/job.${JOB}.err"
|
|
|
|
NOW=`date +"%H:%M"`
|
|
|
|
echo "Synchronous test with "$e" exploit set with dispatched at "$NOW" with jobid "$JOB"" >> ./slurm_reports/"$folder"/sync_data.txt
|
|
|
|
#Wait until job is finished
|
|
while squeue | grep "$JOB" > /dev/null 2>&1; do
|
|
#Slurm occasionally has an issue where the prog finishes but doesn't leave slurm queue
|
|
#Check if program finished by checking the output file for the final line, delay by 5 seconds for safety, then cancel the job
|
|
if test -f "$FILE" && (cat "$FILE" | grep "total run time" > /dev/null 2>&1) ; then
|
|
for j in {1..5}
|
|
do
|
|
sleep 1
|
|
done
|
|
SKIP_FLAG=1
|
|
echo "Job done, but slurm hung." >> ./slurm_reports/"$folder"/sync_data.txt
|
|
tmp=`scancel "$JOB"`
|
|
sleep 3
|
|
break
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
#Wait for the delay between job finish and file write
|
|
while ! test -f "$FILE"; do
|
|
sleep 1
|
|
done
|
|
|
|
#Get runtime and states from the output
|
|
#RUNTIME=`cat "$FILE" | grep -oP '(?<=total run time is )[^ ]*'`
|
|
RUNTIME=`cat "$FILE" | grep -oP '(?<=AG TOOK )[^ ]*'`
|
|
DUP=`cat "$FILE" | grep -oP '(?<=Duplicated States that had to be removed: )[^ ]*'`
|
|
STATES=`cat "$FILE" | grep -oP '(?<=Total States: )[^ ]*'`
|
|
EDGES=`cat "$FILE" | grep -oP '(?<=Total Edges: )[^ ]*'`
|
|
|
|
|
|
if ! test -s "$ERR" || test "$SKIP_FLAG" -eq 1 ; then
|
|
printf "${e} Exploit Set, ${RUNTIME} runtime. ${STATES} states, ${EDGES} edges \n\n" >> ./slurm_reports/"$folder"/sync_data.txt
|
|
str="$e","$STATES","$EDGES"
|
|
echo $str >> ./slurm_reports/"$folder"/sync_data.csv
|
|
else
|
|
printf "Errors occurred. Please see err file for more details. \n\n" >> ./slurm_reports/"$folder"/sync_data.txt
|
|
fi
|
|
|
|
done
|