Ubuntu 16.04 minecraft systemd

we want a user “minecraft” without homedir and without password to run and own the minecraft server – also run it in a screen sesssion so we can gracefully exit.

thanks to:
https://gist.github.com/nathanielc/

create user minecraft, no homedir, move it to
here is the basic systemd daemon for the server…

[Unit]
Description=Minecraft Server

Wants=network.target
After=network.target

[Service]
User=minecraft
WorkingDirectory=/opt/minecraft

ExecStart=/usr/bin/screen -DmS mc /usr/bin/java -Xmx1024M -Xms512M -jar minecraft_server.1.9.4.jar nogui
ExecStop=/usr/bin/screen -p 0 -S mc -X eval 'stuff "say SERVER SHUTTING DOWN. Saving map..."\\015'
ExecStop=/usr/bin/screen -p 0 -S mc -X eval 'stuff "save-all"\\015'
ExecStop=/usr/bin/screen -p 0 -S mc -X eval 'stuff "stop"\\015'
ExecStop=/bin/sleep 2

[Install]
WantedBy=multi-user.target

now we can use different directories and run multiple minecraft servers…

basic line to run minecraft:
/usr/bin/java -Xmx1024M -Xms512M -jar minecraft_server.1.9.4.jar nogui

mkdir survival
mkdir creative

root# groupadd -r minecraft
root# useradd -r -g minecraft -d “/opt/minecraft” -s “/bin/bash” minecraft
sudo adduser minecraft minecraft
and hand your server-installation over to our new user
sudo chown -R minecraft:minecraft /opt/minecraft

the screen session is created to pass control arguments to the server.

start creative session using ‘systemctl start minecraft@creative’ and @survival for survival.

finished daemon: /etc/systemd/system/minecraft@.service
[Unit]
Description=Minecraft Server %i

Wants=network.target
After=network.target

[Service]
User=minecraft
WorkingDirectory=/opt/minecraft/%i

ExecStart=/usr/bin/screen -DmS mc-%i /usr/bin/java -Xmx1024M -Xms512M -jar minecraft_server.1.9.4.jar nogui
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say SERVER SHUTTING DOWN. Saving map..."\\015'
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "save-all"\\015'
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "stop"\\015'
ExecStop=/bin/sleep 2

[Install]
WantedBy=multi-user.target

#########
# HowTo
#########
#
# Create directory in /opt/minecraft-XX where XX is a name like 'survival'
# Add minecraft_server.jar into dir with other conf files for minecraft server
#
# Enable/Start systemd service
# systemctl enable minecraft@survival
# systemctl start minecraft@survival
#
# To run multiple servers simply create a new dir structure and enable/start it
# systemctl enable minecraft@creative
# systemctl start minecraft@creative

un each server once, change the eula.txt and start it again, then stop it again, edit the server.properties file
here is the creative one, just change the gamemode and the motd and the server port for a second one…
also consider offline mode if you want to do LAN play
(also I hate achievment announcements.. thanks for allowing me to disable them…)

#Minecraft server properties
#Thu May 26 09:48:18 CEST 2016
max-tick-time=60000
generator-settings=
allow-nether=true
force-gamemode=true
gamemode=1
enable-query=false
player-idle-timeout=0
difficulty=1
spawn-monsters=true
op-permission-level=4
announce-player-achievements=false
pvp=false
snooper-enabled=true
level-type=DEFAULT
hardcore=false
enable-command-block=false
max-players=20
network-compression-threshold=256
resource-pack-sha1=
max-world-size=29999984
server-port=xxxxx
server-ip=xxx.xxx.xxx.xxx
spawn-npcs=true
allow-flight=true
level-name=world
view-distance=10
resource-pack=
spawn-animals=true
white-list=false
generate-structures=true
online-mode=false
max-build-height=256
level-seed=
use-native-transport=true
motd=CREATIVE AndreasR Minecraft CREATIVE
enable-rcon=false

don’t forget the firewall:

< ?xml version="1.0" encoding="utf-8"?>

Minecraft
The minecraft server that runs on this host. This service has a customized Port.

firewall-cmd –reload
firewall-cmd –zone internal –add-service Minecraft –permanent

(leave out “–permanent” for immediate effect)