[[研究メモ]]
*スリープジョブを投げる&スリープノードにログインする [#ka1fff0e]
どちらかの用途だけでも使えます。ジョブの制限時間&制限時間オプション、グループ、プレミアムオプションなどはスクリプト内で定義されています。
(例)Sキューに3つジョブを投げる
./auto-sleep.sh S 3
(一覧が出てくるので入りたいノードを選ぶ、もしくはそのまま終了)
(注意)デフォルトでは投げてから3秒待ってt2statをしますが、TSUBAMEが混んでるときはすぐにジョブが入らないことがあります。プレミアムオプションをつけるとすぐに入りやすくなります。
(例)既に投げてあるスリープジョブが走ってるノードに入る
./auto-sleep.sh a 0
(一覧が出てくるので入りたいノードを選ぶ)
以下、auto-sleep.shのソース。
#!/usr/bin/sh
CMDNAME=`basename $0`
if [ $# -ne 2 ]; then
echo "Usage: ./$CMDNAME [Queue_name] [Number_of_jobs] (if [Number_of_jobs] == 0, only ssh)"
exit 1
fi
echo -e "\n *** This script throws sleep-job & ssh to the sleep node. *** \n"
WTIME=90:00:00
QUE=$1
GROUP=t2g-acls2012
PREMIUM=2
if [ $2 -gt 0 ]; then
for i in `seq 1 $2`
do
echo "sleep 1500000" > sleep.sh
chmod 755 sleep.sh
t2sub -j oe -N sleep -W group_list=$GROUP -p $PREMIUM -q $QUE -l walltime=$WTIME -et 2 -l select=1:ncpus=12:gpus=3:mem=50gb ./sleep.sh
rm -f sleep.sh
sleep 3s
done
fi
echo -e "\n *** Result of t2stat. *** \n"
IFS=$'\n'
LINES=( $( t2stat -n1 | grep "sleep" ) )
node=0
for line in ${LINES[@]}; do
echo $line
#echo $node
host=`echo $line | sed -e "s/^.*[^.]t2\(.*\)\/.*$/t2\1/"`
#echo $host
nodelist[$node]=$host
node=`expr ${node} + 1`
#echo $i
done
while :
do
echo -e "\n Node number\n"
node=0
for line in ${nodelist[@]}; do
echo "$node : ${LINES[$node]}"
node=`expr ${node} + 1`
done
echo "$node : end this script"
echo -e "\n Please input node number.\n"
read ans
if [ $ans -eq $node ]; then
break
fi
ssh="ssh ${nodelist[$ans]} -Y"
echo $ssh
eval $ssh
break
done