現在 JOGで使用しているスクリプトは以下の通りです.
データベース増大の原因の generate map はコメントアウトしています (^^;
#!/bin/bash
#
# opensim_region (OpenSim Region Server) using tmux
# by Fumi.Iseki
#
OPNSM=OpenSim.exe # 起動するプログラム
OSDIR=/usr/local/opensim # OpenSim をインストールしたディレクトリを指定
PRGFL=/etc/init.d/opensim_region # このスクリプトのフルパス
MONO=/usr/local/bin/mono # mono へのパス
SLEEPTM=15 # リスタート時のスリープ時間 (s)
CHKTM=30 # 監視間隔 (s)
CNTMX=60 # ハングアップ監視回数.判定時間は $CNTMX * $CHKTM (s)
#OPTION="--server"
export PATH=/usr/local/bin:$PATH
export MONO_THREADS_PER_CPU=512
SCRNID=opensim_region
PIDFL=/var/run/opensim_region_check.pid
start() {
echo "OpenSim Region Server Start."
tmux new -d -s $SCRNID -c $OSDIR/bin "$MONO $OPTION $OPNSM"
}
stop() {
tmux send-keys -t $SCRNID C-m "quit" C-m
echo "OpenSim Region Server Stoped."
}
kill_check() {
PID=`cat $PIDFL 2> /dev/null`
if [ "$PID" != "" ]; then
kill -9 $PID 2> /dev/null
rm -f $PIDFL
fi
}
start_check() {
kill_check
echo $$ >| $PIDFL
PRVTM="0:00"
COUNT=0
#
while [ "" = "" ]; do
CHECK=`ps ax|grep tmux |grep $SCRNID`
if [ "$CHECK" = "" ]; then
start
PRVTM="0:00"
COUNT=0
else
CHECK=`ps ax|grep $MONO |grep $OPNSM |grep -v tmux`
EXETM=`echo $CHECK | awk -F" " '{print $4}'`
if [ "$PRVTM" = "$EXETM" ]; then
COUNT=`expr $COUNT + 1`
if [ $COUNT -ge $CNTMX ]; then
tmux send-keys -t $SCRNID C-m "quit" C-m
sleep $CHKTM
PID=`echo $CHECK | awk -F" " '{print $1}'`
kill -9 $PID
else
tmux send-keys -t $SCRNID C-m "show stats" C-m
#tmux send-keys -t $SCRNID C-m "generate map" C-m
fi
else
COUNT=0
fi
PRVTM=$EXETM
fi
#
sleep $CHKTM
done
}
case "$1" in
start)
start
/bin/bash $PRGFL check &
;;
stop)
kill_check
stop
;;
restart|reload)
kill_check
stop
sleep $SLEEPTM
start
/bin/bash $PRGFL check &
;;
check)
start_check
;;
*)
echo $"Usage: $0 {start|stop|restart|check}"
exit 1
esac
exit $?