From a05eaa52115e81b6ddf609321c89c4b30ac2c15a Mon Sep 17 00:00:00 2001 From: Kris Lamoureux Date: Sun, 12 May 2024 23:55:42 -0400 Subject: [PATCH] testing --- .gitignore | 1 + Dockerfile | 2 +- Makefile | 18 ++++++++++++++++++ docker-compose.yml | 6 ++++-- entrypoint.sh | 32 +++++++++++++++++++++++++++++++- 5 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 Makefile diff --git a/.gitignore b/.gitignore index 6c5156b..d8c21ac 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ data .env +screenlog.0 diff --git a/Dockerfile b/Dockerfile index 882898f..51a96d7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,7 @@ RUN groupadd -g 1000 minecraft && \ # Install scripting dependencies RUN apt-get update && \ - apt-get install -y curl gpg jq screen && \ + apt-get install -y curl gpg jq procps screen && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..da3dfd6 --- /dev/null +++ b/Makefile @@ -0,0 +1,18 @@ +CONTAINER = minecraft-minecraft-1 + +.PHONY: default build clean install +default: build + +build: + docker compose build + +clean: + rm screenlog.0 + docker compose down --rmi all + docker builder prune -f + +install: build + touch screenlog.0 + docker compose up -d + sleep 2 + docker logs -f $(CONTAINER) diff --git a/docker-compose.yml b/docker-compose.yml index bc34f4a..4d1097e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,8 +12,10 @@ services: image: ${IMAGE:-minecraft}:${TAG:-latest} ports: - "0.0.0.0:25565:25565" - #volumes: - # - minecraft:/app/world + volumes: + - type: bind + source: ./screenlog.0 + target: /app/screenlog.0 environment: EULA: "${EULA:-false}" DEBUG: "${DEBUG:-false}" diff --git a/entrypoint.sh b/entrypoint.sh index 6ea47b4..c44c638 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -46,6 +46,9 @@ fi # Pre-create the screen log touch screenlog.0 +# Set up a SIGTERM signal trap +trap 'kill ${TAIL_PID}' SIGTERM + # Run server in screen (without attaching) /usr/bin/screen -dmS minecraft -L \ bash -c " @@ -54,6 +57,33 @@ touch screenlog.0 /usr/bin/java $JVM_OPTS -jar server.jar --nogui " +# Get screen PID +SCREEN_PID="$( + screen -ls | grep -oE '[0-9]+\.minecraft' | cut -d. -f1 +)" + +# Check screen PID +if ! ps -p "$SCREEN_PID" > /dev/null; then + echo "[ERROR] Could not obtain screen PID: \"$SCREEN_PID\"" + screen -ls + echo now testing: + screen -ls | grep -oE '[0-9]+\.minecraft' | cut -d. -f1 + exit 1 +fi + # Tail screen log to container stdout [ "$DEBUG" = "true" ] && echo "[DEBUG] Tailing screenlog.0" -tail -f screenlog.0 +tail -f screenlog.0 & +TAIL_PID=$! +wait "$TAIL_PID" + + +if screen -ls | grep -q minecraft; then + echo "[INFO] Stopping minecraft" + /usr/bin/screen -p 0 -S minecraft -X eval 'stuff "stop"\015' +else + echo "[WARN]: 'minecraft' screen not found attempting to stop server" + return 1 +fi + +wait "$SCREEN_PID"