bashを使って計算時間を出力したい
数値計算を行う方にとって長いジョブを実行する待ち時間を有効に使うことはとても重要である。私は長いジョブを実行する間に論文を読んだり、気分転換をするなどしている。数値モデルを使う場合などは、細かい条件を変えた場合に待ち時間はだいだいは把握できるが、正確に何分図っているか把握できていないことに気が付いた。そのため、似たようなモデルを実行することを想定して、ジョブが終了するまでに何分かかったか出力するシェルスクリプトを書いてみることにした。
環境
Oracle VirtualBox 6.0.14
CentOS-7x86_64-DVD-1908 linux redhat64bit
実際にやったこと
date関数を使ってこのシェルスクリプトを書いてみた。
以下のように記述することでdate関数から特定の変数を出力させることができます。
starttime=$(date) #デフォルト
starttimeh=$(date +'%H') #時間0~23
starttimem=$(date +'%M') #分0~59
starttimes=$(date +'%S') #秒0~59
starttimej=$(date +'%j') #日0~365
これをつかってジョブを始めた時間と終了した時間を引き算して何時間何分何秒かかったか出力させ
ます。
#speedtest
#starttime
starttime=$(date)
starttimeh=$(date +'%H')
starttimem=$(date +'%M')
starttimes=$(date +'%S')
starttimej=$(date +'%j')
#
#execute job
ジョブを書く部分 $python test.py等
#
#output how long does it take to execute jobs
endtimeh=$(date +'%H')
endtimem=$(date +'%M')
endtimes=$(date +'%S')
endtimej=$(date +'%j')
j=$(($endtimej-$starttimej))
h=$(($endtimeh-$starttimeh))
m=$(($endtimem-$starttimem))
s=$(($endtimes-$starttimes))
if [ $h -lt 0 ]; then
$j = $j - 1
$h = $h + 24
elif [ $m -lt 0 ]; then
$m = $m + 60
$h = $h - 1
elif [ $s -lt 0 ]; then
$m = $m - 1
$s = $s + 60
fi
echo "starttime=$starttime"
echo "endtime=$(date)"
echo "caltime=$j(days)$h(hours)$m(min)$s(s)"
補足:よりいい方法があったので
Line Notifyというサービスを使うとジョブが終了したことをLineに通知させることができます。
Pythonをつかってコードを書いている方がいたのでこれを参考にしました。
https://qiita.com/aoyahashizume/items/13848b013daa18f6461b
これを取り入れることでdate関数をつかって前のジョブ計算から何分くらいかかるか正確に把握したうえでLine通知がくるまで休憩するなどすることができます。