0

起動スクリプトを使用して、CentOS の webmin 経由で Minecraft サーバーを起動しています。サーバー自体を起動する前に、いくつかのファイルをバックアップします。最近、誤ってスクリプトを 2 回続けて実行してデータを台無しにしてしまいました。その結果、Minecraft サーバーの 2 つのインスタンスが実行され、データ ファイルなどですべてがうまくいかなくなりました。

これを防ぐために、プロセスが実行されていることを検出した場合にスクリプトを終了させたいと考えています。私は同様の問題を探し回り、ロックファイルのようなものが提案されましたが、起動スクリプトはMinecraftサーバープロセスの画面を設定するだけで、サーバーの停止は通常画面を終了するか、ゲーム内コマンドを使用してサーバーを停止します。

サーバー プロセスは、次のコマンドを使用して開始されます。

screen -dmS minecraft java -Xincgc -Xmx2G -jar server.jar

このプロセスが既に実行されているかどうかを起動スクリプトに検出させてから終了させるにはどうすればよいですか?

4

2 に答える 2

3

次のスクリプトを使用します。

#!/bin/bash
LOCKDIR="/path/to/lockdir"

if [ ! mkdir "$LOCKDIR" ]; then
    echo >&2 "Server is already running"
    exit 1
fi

# Here: when exiting, or receiving any of the mentioned signals, remove the lock file      
trap "rmdir \"$LOCKDIR\"" exit INT HUP TERM QUIT
 
# It would be tempting to exec instead, but DON'T DO IT: otherwise the trap is forgotten
minecraft java -Xincgc -Xmx2G -jar server.jar

exit $?

画面内で起動します。

于 2012-01-01T20:24:28.837 に答える
1

これらのリンクからアイデアが得られるかもしれません: http://mywiki.wooledge.org/ProcessManagement - http://mywiki.wooledge.org/BashFAQ/042 - http://mywiki.wooledge.org/BashFAQ/033 - http: //mywiki.wooledge.org/BashFAQ/045

于 2012-01-01T20:28:13.843 に答える