
MinecraftのサーバをLinux上でサービスとして実行しようと思い、最下部に示したシェルを作成し、
# chkconfig --add Minecraft
を実行しました。
再起動を行ってみたところ再起動後もMinecraftのサーバは正常に起動していたのですが、
Minecraftのサーバログを確認すると終了処理が行われず、そのままプロセスがKillされています。
また、
# service Minecraft stop
を実行した場合には正常に終了した事を示すログが出力されていました。
環境は以下のとおりです。
OS:CentOS 5.5(Kernel 2.6.18)
Java:1.6.0_25(64bit)
minecraft_server.jar:beta 1.5_02
何かするべきことが漏れているのでしょうか。
アドバイスよろしくお願いします。
/etc/init.d/Minecraft
#!/bin/sh
# chkconfig:2345 99 01
SCREEN_PATH=/usr/local/bin
SCREEN_NAME=minecraft-server
MINECRAFT_ROOT=/root/Minecraft
DEFAULT_STOP_WATE_TIME=60
MIN_MEMORY=1024M
MAX_MEMORY=4096M
start(){
cd ${MINECRAFT_ROOT}/conf
${SCREEN_PATH}/screen -AmdS minecraft-server java -Xms${MIN_MEMORY} -Xmx${MAX_MEMORY} -jar ../bin/minecraft_server.jar nogui > test.txt
}
stop(){
${SCREEN_PATH}/screen -S ${SCREEN_NAME} -p 0 -X eval "stuff save-all"
while [ ${DEFAULT_STOP_WATE_TIME} -ne 0 ]
do
if test `expr ${DEFAULT_STOP_WATE_TIME} % 30` -eq 0 -o ${DEFAULT_STOP_WATE_TIME} -le 10
then
${SCREEN_PATH}/screen -S ${SCREEN_NAME} -p 0 -X eval "stuff say\040Server\040will\040stop\040in\040${DEFAULT_STOP_WATE_TIME}\040seconds.\015"
fi
DEFAULT_STOP_WATE_TIME=`expr ${DEFAULT_STOP_WATE_TIME} - 1`
sleep 1
done
${SCREEN_PATH}/screen -S ${SCREEN_NAME} -p 0 -X eval 'stuff stop\015'
sleep 10
}
restart(){
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0
No.3ベストアンサー
- 回答日時:
あぁ、元の質問で「再起動」と言われていたのは、Minecraft サービスの再起動ではなく、shutdown によるシステムそのものの再起動のことでしたか。
man shutdown
によると、
「All processes are first notified that the system is going down by the signal SIGTERM」
とあるので、
Minecraft サービスの pid を調べて
kill -SIGTERM pid
としてみてください。
これで shell に書かれたとおりの終了処理がなされなかった場合はどうしようもないですね。
(手元の環境 (debian) で実験したら、プロセスを start/stop するシェルの、 stop に書かれた処理(ログにメッセージを吐きだす)は行われました。)
逆に、これで shell に書かれたとおりの 60秒間の終了処理が行われた場合は、shutdown が プロセスに SIGTERM シグナルを送ってから runlevel 0 に移行するまでの時間を、Minecraft の shell が終了処理を行う秒数以上空けてあげれば、システムが runlevel 0 に以降する前に Minecraft の shell の終了処理が完了するのではないでしょうか。
つまり、
shutdown -t 60 -h
(60秒じゃカツカツですね、実際には 70秒くらいでやってみてください)
ところで念のためですが、/etc/inittab の記述は大丈夫ですよね?
ありがとうございます。
kill -SIGTERM pidをしてみたのですが変化が有りませんでした。
仕方ないのでshutdownにリダイレクトするシェルを作成してそのシェル経由でサービスを停止する事にします。
No.4
- 回答日時:
一つ忘れてました
>>K01Minecraft は /etc/rc.d/rc[0-6].d のどのディレクトリの下の K01Minecraftを書き換えましたか?
>変更を行ったRunlevelは0,1,6です。
この変更は元に戻しておいてくださいね。
No.2
- 回答日時:
>(1)正常に終了処理が実行される。
>(2)正常に終了処理が実行される。
>(3)正常に終了処理が実行される。
そうですか。
どうやら、service コマンドが、
restart)
restart
を正しく処理してないようですので、
まずは、
restart)
start
stop
の変更はこのままでよいということになりそうですね。
>またK01MinecraftをS01Minecraftにリネームし、
>リンク先を"/etc/init.d/Minecraft stop"に変更しても
>終了処理は実行されていません。
リンク先は、"/etc/init.d/Minecraft" の書き間違いだと思いますが、
K01Minecraft は /etc/rc.d/rc[0-6].d のどのディレクトリの下の K01Minecraftを書き換えましたか?
runlevel コマンドで、現在の runlevel の数字が表示されます。
それに該当する数字の /etc/rc.d/ 以下の K.... を S... に変更しないと、その runlevel に対して有効になりません。
runlevel 0 は シャットダウン、6 はリブート、1 はシングルユーザーモードなので、この3つは気をつけてください。
CentOS であれば、
chkconfig Minecraft on
とコマンドを打てば、自動的に各 runlevel に対して適切に K... を S... にしてくれるはずです。
また、S01Minecraft の "01" は適正ですか?
SXXの数字の順でサービスが立ち上がるのですが、Minecraft は 01 番目に立ちあげても大丈夫ですか?
これでは、syslog や network サービスよりも先に立ち上がることになりますが・・・。
私は、後で自分で追加したサービスは、特に起動順序が最初でないといけないというもののでなければ、
S99 くらいにして、他のサービスが立ちあがった後で最後に立ちあがるようにしています。
この回答への補足
いくつか説明漏れがあって申し訳有りません。
1./etc/init.d/Minecraftを変更する前からservice Minecraft restart,service Minecraft stopは正常に終了処理が行われる。
2.shutdown -h nowやshutdown -r nowでは正常に終了処理が行われずallkillによってプロセスが殺される。
という状況です。
>K01Minecraft は /etc/rc.d/rc[0-6].d のどのディレクトリの下の K01Minecraftを書き換えましたか?
変更を行ったRunlevelは0,1,6です。
この場合終了処理を行いたいため、
S始まりのシンボリックリンクにstopオプション付で実行を行ってみた次第です。
こちらの説明ミスによりお時間をいただいた上に、解決でき無い形となって申し訳有りません。
sleepコマンドが存在する事が原因の可能性を考慮してShellを書き換えてみようと思います。
この件の原因が判明しました。
/etc/rc.d/rcがシャットダウンコマンドを実行する際に、
下記パスにロックファイルが存在している事を確認しています。
下記パスのロックファイルが存在している場合に限りストップコマンドを実行しています。
(恐らくシャットダウン高速化のため)
■ロックファイル
/ver/lock/subsys/サービス名
対処としては下記の2行をstart()とstop()に追記する事でストップコマンドを実行させる事が出来ます。
■start()に追記する行
touch /ver/lock/subsys/Minecraft
■stop()に追記する行
rm -f /ver/lock/subsys/Minecraft
No.1
- 回答日時:
Minecraft は知りませんが、shell スクリプトに特に問題はなさそうですね。
あまり意味がないような気がしますが,]
(1)
/etc/init.d/Minecraft restart
とやると、シャットダウン処理はどうなりますか?
(2)
それでも変化ない場合、case 文の
restart)
restart
を
restart)
start
stop
に書き換えて、service Minecraft restart を実行するとどうなりますか?
(3)
上記(2)のままで、
/etc/init.d/Minecraft restart
を実行すると、どうなりますか?
この回答への補足
実験の結果ですが、
(1)正常に終了処理が実行される。
(2)正常に終了処理が実行される。
(3)正常に終了処理が実行される。
のようになりました。
また2の変更を行った状態で、
shutdown -r now
を行ったところ終了処理が実行されていません。
またK01MinecraftをS01Minecraftにリネームし、
リンク先を"/etc/init.d/Minecraft stop"に変更しても
終了処理は実行されていません。
以上のような状況です。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) mariadbでのエラー 1 2022/11/15 12:31
- その他(セキュリティ) Software Distribution folder の rename 手順 1 2022/08/19 13:08
- 英語 高一英語 前置詞 画像の1番下の問題です。 答えは There is a bus stop in f 4 2023/08/11 13:12
- その他(プログラミング・Web制作) Pythonで会員サイトの自動ログイン ID Nameがない 1 2022/12/16 02:09
- オンラインゲーム とても急いでいます。Minecraft Java版についてです。 MinecraftのJava版でマ 1 2023/03/15 21:19
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- 英語 stop by と make a stop の違い 1 2022/11/14 11:57
- TOEFL・TOEIC・英語検定 不定詞、なぜ not to では駄目ですか? 1 2022/08/17 11:11
- Visual Basic(VBA) VBAで一時中断したプログラムの再開をさせたい 1 2022/11/13 11:15
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
LinuxでWine使うとどのくらいWi...
-
Core 2 Duo の古いパソコンに最...
-
ubuntu(linux)のシャットダウン...
-
インストールできないですどう...
-
ubuntuのシャットダウンが進ま...
-
Linuxでブートディスクの交換後...
-
bashでシングルクォート内の変...
-
Ubuntu on Xorgのログインについて
-
ssl_request_logの必要性について
-
Linux のシェルスクリプトの強...
-
ログにserver reached MaxReque...
-
WineのRufusでデバイスを検知す...
-
Linux Mint でも使えないですよ...
-
CentOSが起動時にフリーズ
-
apacheでリバースプロキシを設...
-
Windowsのローカルディレクトリ...
-
ubuntuで デイスク/deb/loopと...
-
ubuntu 24 へのCanon 複合機ス...
-
tarで纏める際に、複数場外した...
-
UNIX manページとか見る頻度高...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
LinuxでWine使うとどのくらいWi...
-
Core 2 Duo の古いパソコンに最...
-
Linux のシェルスクリプトの強...
-
ubuntu(linux)のシャットダウン...
-
bashでシングルクォート内の変...
-
ubuntuで デイスク/deb/loopと...
-
apacheでリバースプロキシを設...
-
CentOSが起動時にフリーズ
-
ubuntuのシャットダウンが進ま...
-
ubuntu が起動しない。
-
Windowsのローカルディレクトリ...
-
Ububtuでファイル共有できない...
-
Ubuntu on Xorgのログインについて
-
ログにserver reached MaxReque...
-
「/var/log」内のログの削除の...
-
ubuntu 24 へのCanon 複合機ス...
-
ssl_request_logの必要性について
-
私のパソコンでVirtualBoxは使...
-
WineのRufusでデバイスを検知す...
-
LinuxのノートパソコンでDVDコ...
おすすめ情報