From a01f8dae6ed2e63a1055e85ca1de0bc89a243fc5 Mon Sep 17 00:00:00 2001 From: Mario Alegre Date: Wed, 10 Jun 2020 14:10:24 -0500 Subject: [PATCH] some bugfixes to mcbe --- src/debian/Containerfile | 2 +- src/minecraft_be/assets/bin/mcbe-backup | 52 +++++++++---------- .../assets/bin/{mcbe-stop => mcbe-shutdown} | 6 +-- .../assets/systemd/mcbe-backup.service | 4 +- .../assets/systemd/mcbe-backup.timer | 2 +- src/minecraft_be/assets/systemd/mcbe.service | 6 +-- 6 files changed, 35 insertions(+), 37 deletions(-) rename src/minecraft_be/assets/bin/{mcbe-stop => mcbe-shutdown} (86%) diff --git a/src/debian/Containerfile b/src/debian/Containerfile index 2052a28..7023519 100644 --- a/src/debian/Containerfile +++ b/src/debian/Containerfile @@ -14,7 +14,7 @@ RUN rm /etc/localtime && \ # Install packages RUN apt update -y && \ apt upgrade -y && \ - apt install -y init sudo wget nano less man-db unzip && \ + apt install -y init sudo wget nano less man-db unzip rsync && \ apt autoremove -y --purge && \ apt clean -y diff --git a/src/minecraft_be/assets/bin/mcbe-backup b/src/minecraft_be/assets/bin/mcbe-backup index 09e8c45..763da50 100755 --- a/src/minecraft_be/assets/bin/mcbe-backup +++ b/src/minecraft_be/assets/bin/mcbe-backup @@ -1,44 +1,40 @@ #!/bin/bash do_backup() { - mcbe-stop $1 "Shutting down server for scheduled daily backup." - rsyn /home/mcadmin/worlds/ /vol/worlds/ - systemctl start mcbe - rm /home/mcadmin/backup.attempts + echo "Shutting down server for scheduled daily backup." + mcbe-shutdown 10 "Shutting down server for scheduled daily backup." + rsync -vaSH /home/mcadmin/worlds/ /vol/worlds/ + sleep 5 + echo "Restarting server after backup." + service mcbe start } # Check if server is started -status=$(systemctl show "$service" -p ActiveState --value) +status=$(systemctl show mcbe -p ActiveState --value) +# Check if any players present +players=$(mcbe-exec list | cut -d ' ' -f 3 | cut -d '/' -f 1) +# check when mcbe-backup was last triggered +last=$(date -d "$(systemctl show mcbe-backup.timer -p LastTriggerUSec --value)" +%s) +# get current time +today=$(date +%s) + # if service is not active, do backup immediately and exit if [[ $status == inactive ]]; then - rsyn /home/mcadmin/worlds/ /vol/worlds/ - rm /home/mcadmin/backup.attempts - exit 0 -fi + echo "Service is inactive: copying worlds immediately without restarting service." + rsync -vaSH /home/mcadmin/worlds/ /vol/worlds/ -# Check if any players present -present=$(mcbe-exec list | cut -d ' ' -f 3 | cut -d '/' -f 1) # if no players are present, do backup immediately and exit -if [[ $present == 0 ]]; then - do_backup 0 - exit 0 -fi - -cd /home/mcadmin - -# create backup.attempts file if it doesn't exist -if [[ ! -e backup.attempts ]]; then - echo "0" > backup.attempts -fi +elif [[ $players == 0 ]]; then + echo "No players detected: running backup immediately." + do_backup -# read backup.wait and add one to it -attempts=$(( $(cat backup.attempts) + 1 )) +# if 12 or more hours have passed since backup was triggered, go ahead and force a shutdown anyways +elif [[ $(( $today - $last )) -ge 43200 ]]; then + echo "Backup was triggered more than 12 hours ago: forcing backup now." + do_backup -# if 12 or more attempts have already been made, go ahead and force a shutdown anyways -if [[ $attempts -ge 12 ]]; then - do_backup 10 # otherwise, schedule another attempt in an hour else - echo $attempts > backup.attempts + echo "Players present in server: rescheduling backup to one hour from now." systemd-run --on-active=1h $0 fi diff --git a/src/minecraft_be/assets/bin/mcbe-stop b/src/minecraft_be/assets/bin/mcbe-shutdown similarity index 86% rename from src/minecraft_be/assets/bin/mcbe-stop rename to src/minecraft_be/assets/bin/mcbe-shutdown index e56192b..b22934f 100755 --- a/src/minecraft_be/assets/bin/mcbe-stop +++ b/src/minecraft_be/assets/bin/mcbe-shutdown @@ -10,8 +10,8 @@ else exit 2 fi -# if 2nd arg is given (and shutdown is not immediate), say it before shutting down -if [[ -z $2 ]]; then +# if 2nd arg is given, say it before shutting down +if [[ -n $2 ]]; then mcbe-exec say "$2" fi @@ -33,4 +33,4 @@ while [[ $count -gt 0 ]]; do sleep 1 done -mcbe-exec stop +systemctl stop mcbe diff --git a/src/minecraft_be/assets/systemd/mcbe-backup.service b/src/minecraft_be/assets/systemd/mcbe-backup.service index de120f2..b1b0535 100644 --- a/src/minecraft_be/assets/systemd/mcbe-backup.service +++ b/src/minecraft_be/assets/systemd/mcbe-backup.service @@ -1,9 +1,11 @@ [Unit] After=mcbe.service -Description=Back up Minecraft Bedrock Edition server +Description=Backup Minecraft Bedrock Edition Server Requisite=mcbe.service [Service] ExecStart=/usr/local/bin/mcbe-backup +StandardOutput=journal +StandardError=journal KillMode=none Type=oneshot \ No newline at end of file diff --git a/src/minecraft_be/assets/systemd/mcbe-backup.timer b/src/minecraft_be/assets/systemd/mcbe-backup.timer index 11f007b..7ae447a 100644 --- a/src/minecraft_be/assets/systemd/mcbe-backup.timer +++ b/src/minecraft_be/assets/systemd/mcbe-backup.timer @@ -1,5 +1,5 @@ [Unit] -Description=Back up Minecraft Bedrock Edition server daily at 4:05 AM +Description=Backup Minecraft Bedrock Edition Server daily at 4:05 AM [Timer] # Every 2 hours: OnCalendar=0/2:00:00 diff --git a/src/minecraft_be/assets/systemd/mcbe.service b/src/minecraft_be/assets/systemd/mcbe.service index 1cca06d..e0c003c 100644 --- a/src/minecraft_be/assets/systemd/mcbe.service +++ b/src/minecraft_be/assets/systemd/mcbe.service @@ -5,9 +5,9 @@ BindsTo=mcbe.socket Description=Minecraft Bedrock Edition server [Service] -ExecReload=/usr/local/bin/mcbe-exec reload -ExecStop=/usr/local/bin/mcbe-stop -ExecStart=/bin/bash -c 'LD_LIBRARY_PATH=. ./bedrock_server' +ExecReload=/bin/bash -c "echo reload > /run/mcb" +ExecStop=/bin/bash -c "echo stop > /run/mcb" +ExecStart=/bin/bash -c "LD_LIBRARY_PATH=. ./bedrock_server" User=mcadmin WorkingDirectory=/home/mcadmin Restart=on-failure