diff options
author | Jonas Gunz <himself@jonasgunz.de> | 2020-01-05 01:18:24 +0100 |
---|---|---|
committer | Jonas Gunz <himself@jonasgunz.de> | 2020-01-05 01:18:24 +0100 |
commit | fb7ea1517da73501a6da96f1e4504a6bed6f55b1 (patch) | |
tree | 87ab63d27c937b8075a187150e82b519a8893d94 | |
parent | 81e68ebc5bfc4585448bcdcdb70841cb54e735ee (diff) | |
download | minecraft-server-tools-fb7ea1517da73501a6da96f1e4504a6bed6f55b1.tar.gz |
added unit file
-rw-r--r-- | Readme.md | 8 | ||||
-rw-r--r-- | minecraft.service | 16 | ||||
-rwxr-xr-x | server.sh | 55 |
3 files changed, 71 insertions, 8 deletions
@@ -41,6 +41,14 @@ The following example copies the created archive to a remote server. BACKUP_HOOK="scp $ARCHNAME user@server:/home/user/backups/" +## Start automatically + +Create user and group `minecraft` with home in `/var/minecraft`. +Populate the directory with server.sh and a server jar. +Place `minecraft.service` in `/etc/systemd/system/` +and run `systemctl start minecraft` to start once or +`systemctl enable minecraft` to enable autostarting. + ## Disclaimer The scripts are provided as-is at no warranty. diff --git a/minecraft.service b/minecraft.service new file mode 100644 index 0000000..f261625 --- /dev/null +++ b/minecraft.service @@ -0,0 +1,16 @@ +# minecraft.service + +[Unit] +Description=Minecraft Server + +[Service] +Type=forking +User=minecraft +Group=minecraft +PIDFile=/var/minecraft/server-screen.pid +ExecStart=/var/minecraft/server.sh start +TimeoutStopSec= 180 +ExecStop=/var/minecraft/server.sh stop + +[Install] +WantedBy=multi-user.target @@ -7,8 +7,8 @@ JAR="server.jar" JAR_ARGS="-nogui" SCREEN_WINDOW="minecraftserverscreen" WORLD_NAME="world" -LOGFILE="mcserver.log" - +LOGFILE="server-screen.log" +PIDFILE="server-screen.pid" #HOOKS BACKUP_HOOK='backup_hook_example' @@ -20,14 +20,36 @@ function send_cmd () { screen -S $SCREEN_WINDOW -p 0 -X stuff "$1^M" } -function server_start() { - screen -list $SCREEN_WINDOW > /dev/null +function assert_running() { + if [ ! -e $PIDFILE ]; then + return + fi + + ps -p $(cat $PIDFILE) > /dev/null if [ $? -eq 0 ] then echo "It seems a server is already running. If this is not the case,\ manually attach to the running screen and close it." exit 1 fi +} + +function assert_not_running() { + if [ ! -e $PIDFILE ]; then + echo "Server not running" + exit 1 + fi + + ps -p $(cat $PIDFILE) > /dev/null + if [ ! $? -eq 0 ] + then + echo "Server not running" + exit 1 + fi +} + +function server_start() { + assert_running if [ ! -e "eula.txt" ] then @@ -36,27 +58,44 @@ function server_start() { fi rm -f $LOGFILE - screen -L -Logfile "$LOGFILE" -S $SCREEN_WINDOW -p 0 -d -m \ - $JRE_JAVA $JVM_ARGS -jar $JAR $JAR_ARGS + screen -L -Logfile "$LOGFILE" -S $SCREEN_WINDOW -p 0 -D -m \ + $JRE_JAVA $JVM_ARGS -jar $JAR $JAR_ARGS > /dev/null & + echo $! > $PIDFILE + echo Started with PID $! exit } function server_stop() { + assert_not_running send_cmd "stop" + + local RET=1 + while [ ! $RET -eq 0 ] + do + sleep 1 + ps -p $(cat $PIDFILE) > /dev/null + RET=$? + done + + echo "stopped the server" + + rm -f $PIDFILE + exit } function server_attach() { + assert_not_running screen -r -p 0 $SCREEN_WINDOW exit } function server_status() { - screen -list $SCREEN_WINDOW > /dev/null + ps -p $(cat $PIDFILE) > /dev/null if [ $? -eq 0 ] then - echo "Server seems to be running. attach to be sure" + echo "Server is running" else echo "Server is not running" fi |