2014年 09月 05日
[L1J管理テクニック]シャットダウン後自動でサーバを立ち上げる方法
Windowsのタスク(LinuxならCronか)に登録して立ち上がるようにしていたんだが、
タイミングによって自動立ち上げの時点でしっかりとシャットダウンされておらず、
立ち上がらないということが頻発した。
その対策として、シャットダウン後に自動でサーバが立ち上がるよう(タスクを使わず)改造してみた。
いまんとこ上手くいってるっぽいのでそのやり方を紹介
1.jp.l1j.server.GameServer.javaのshutdownメゾットを改修
public void shutdown() {
disconnectAllCharacters();
// Modified by Usico 2014/09/02 Start
try {
String filename = "C:\\hoge\\ServerStart.bat";
Runtime.getRuntime().exec(filename);
} catch (Exception e) {
System.out.println(e);
} finally {
System.exit(0);
}
// Modified by Usico 2014/09/02 End
}
こんなかんじ
filename変数にシャットダウン後に起動するServerStart.batのパスを入れる。常識だが\マークはエスケープシーケンスをつけるように。
2.GameServer.batの改修
timeout 10
cd /D %~dp0
@java -server -XX:PermSize=256m -XX:MaxPermSize=512m -Xms1024m -Xmx10240m -XX:NewRatio=2 -XX:SurvivorRatio=8 -jar l1jserver.jar
@pause
timeout 10(たしかWindowsVistaからしか使えないはず)を先頭にれるだけ。これで10秒間後に2行目以降の処理が流れる。
シェルスクリプトならpingコマンドかなんかで待たせればいいんじゃね
なぜ、これを入れるかというと、System.exit(0);の処理でjava vmが終了するが、その前に起動処理をしないといけない。
同じポートで2個鯖の起動はできないため、exitする前に起動してバッチ側で10秒待たせておき、その間にjava vmを落とす。
これでエラーにならずに鯖が起動できる。
なお、うしこの場合はServerStart_after.batというのをServerStart.batをコピーして作成し、そのバッチファイルにtimeoutを入れている。
テストの時とかで毎回10秒待つのだるいしね?・・・
何かの参考になれば。
by umisaka1
| 2014-09-05 20:51
| Java
|
Comments(0)