Skip to content

Instantly share code, notes, and snippets.

@jinliming2
Created March 26, 2020 10:27
Show Gist options
  • Save jinliming2/36b7ba8423cbdf94cd5a6b748b87e43b to your computer and use it in GitHub Desktop.
Save jinliming2/36b7ba8423cbdf94cd5a6b748b87e43b to your computer and use it in GitHub Desktop.
Minecraft Systemd
[Unit]
Description=Minecraft Server %i
After=network.target
[Service]
Type=forking
WorkingDirectory=/srv/minecraft/%i
PrivateUsers=true
# Users Database is not available for within the unit, only root and minecraft is available, everybody else is nobody
User=minecraft
Group=minecraft
ProtectSystem=full
# Read only mapping of /usr /boot and /etc
ProtectHome=true
# /home, /root and /run/user seam to be empty from within the unit. It is recommended to enable this setting for all long-running services (in particular network-facing ones).
ProtectKernelTunables=true
# /proc/sys, /sys, /proc/sysrq-trigger, /proc/latency_stats, /proc/acpi, /proc/timer_stats, /proc/fs and /proc/irq will be read-only within the unit. It is recommended to turn this on for most services.
# Implies MountFlags=slave
ProtectKernelModules=true
# Block module system calls, also /usr/lib/modules. It is recommended to turn this on for most services that do not need special file systems or extra kernel modules to work
# Implies NoNewPrivileges=yes
ProtectControlGroups=true
# It is hence recommended to turn this on for most services.
# Implies MountAPIVFS=yes
ExecStart=/usr/bin/screen -dmS minecraft-%i /usr/bin/java -server -Xms32M -Xmx1024M -XX:+UseG1GC -XX:+CMSClassUnloadingEnabled -XX:ParallelGCThreads=2 -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -jar /srv/minecraft/minecraft_server.jar nogui
ExecReload=/usr/bin/screen -p 0 -S minecraft-%i -X eval '\'stuff "reload"\\015\''
ExecStop=/usr/bin/screen -p 0 -S minecraft-%i -X eval '\'stuff "say SERVER SHUTTING DOWN. Saving map..."\\015\''
ExecStop=/usr/bin/screen -p 0 -S minecraft-%i -X eval '\'stuff "save-all"\\015\''
ExecStop=/usr/bin/screen -p 0 -S minecraft-%i -X eval '\'stuff "stop"\\015\''
ExecStop=/bin/sleep 10
Restart=on-failure
RestartSec=60s
[Install]
WantedBy=multi-user.target
#########
# HowTo
#########
#
# Create a directory in /srv/minecraft/XX where XX is a name like 'survival'
#
# 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment