[未検証]ChatGPTに30分間誰もログインしてなかったらマイクラサーバーを停止する方法聞いた。
返答内容
以下は、30分間誰もログインしていない場合に自動的にサーバーを停止するためのスクリプトの例です。
minecraft_server_stop.shスクリプトを作成します。新しいテキストファイルを作成し、次のようにファイル名を付けます:minecraft_server_stop.sh
テキストファイルを開き、以下のスクリプトを追加します。
#!/bin/bash
# Get the current time in seconds since the epoch
now=$(date +%s)
# Get the time when the last player logged in
last_login=$(grep "joined the game" /path/to/minecraft_server/logs/latest.log | tail -1 | awk -F '[][()]' '{print $2}')
# If no players have logged in or the last login was more than 30 minutes ago, stop the server
if [[ -z "$last_login" ]] || [[ "$(($now - $last_login))" -ge 1800 ]]; then
screen -r minecraft -X stuff "stop$(printf '\r')"
fi
このスクリプトは、最新のMinecraftサーバーのログファイルから最後にログインしたプレイヤーの時間を取得します。次に、現在の時刻と最後のログイン時刻の差を計算して、30分以上経過している場合にのみサーバーを停止します。
ファイルを保存して閉じます。
スクリプトを実行可能にするために、ターミナルで次のコマンドを実行します:
chmod +x minecraft_server_stop.sh
最後に、cronを使用して、30分ごとにこのスクリプトを自動的に実行するように設定します。例えば、次のコマンドを使用して、cronジョブを編集できます:
crontab -e
crontabファイルの最後に、次の行を追加します:
*/30 * * * * /path/to/minecraft_server_stop.sh
この行は、30分ごとにminecraft_server_stop.shスクリプトを実行するようにcronに指示します。/path/toをスクリプトのファイルパスに置き換えてください。
これで、30分間誰もログインしていない場合にのみ自動的にサーバーを停止するようになりました。注意点としては、Minecraftサーバーのログファイルのパスが/path/to/minecraft_server/logs/latest.logであることが前提条件になります。もし異なる場所にログファイルがある場合は、スクリプト内のパスを適切に変更してください。
また、このスクリプトを使用する場合は、サーバーのタイムゾーンが正確に設定されていることを確認する必要があります。これは、ログファイルに記録された時刻が、サーバーが実際に実行されている時刻と一致するようにするためです。タイムゾーンが正確に設定されていない場合、サーバーが停止される時間が予期せず変更される可能性があります。
休みのときに試してみようと思う。
あ、tmuxの場合って伝えておかないといけないな・・・