河原林研究室>>ワンマン的日記>>自動実行/スケジューリング>> RoboCup2DSimulationの試合を繰り返させるためのバッチ処理、のための試合実行スクリプト
実験自動化のためのスクリプト(初期バージョン)
次のようなスケジュールで試合を自動で行いたい。
試合 teamA vs teamB 試合 teamA vs teamC 試合 teamB vs teamC
rcssserverの起動オプションを変更することによって、 試合終了後にプロセスを落とすことができる。
そこで、 1試合を1スクリプトの実行とみなして、 試合終了後に、次の試合のためのスクリプトを起動することを考える。
しかし、サーバーの起動後にクライアントを起動する必要があるため、 サーバーは、バックグラウンドジョブとして起動する。
そこで、サーバーのプロセス終了をスクリプトの終了とするために、 プロセスを監視しておく必要がある。
以下のスクリプトでは、プロセスが生きているか5秒ごとに確認するためのループを回して実現している。
この方法は、いい方法ではないだろう。
ジョブ制御用の便利なコマンドがあるので、それらを使えばもっと簡単に実現することができる。
#! /bin/sh if [ $# = 2 ] then TEAM_A=$1 TEAM_B=$2 fi DATE=`date +%y%m%d%H%M` LOG_DIR=log/$DATE mkdir $LOG_DIR echo "logging @ $LOG_DIR" # server starting ./start_exp_server.sh $LOG_DIR & process_id=$! echo $process_id sleep 2 # start B team ./start_team.sh $TEAM_A > $LOG_DIR/$TEAM_A # start A team ./start_team.sh $TEAM_B > $LOG_DIR/$TEAM_B flag=1 while [ $flag = 1 ] do sleep 5 result=`skill -n $process_id` if [ "t$result" = "t" ] then flag=0 fi done echo "done"
ジョブの制御
cf. waitコマンド