54 lines
1.2 KiB
Django/Jinja
54 lines
1.2 KiB
Django/Jinja
# {{ ansible_managed }}
|
|
[Unit]
|
|
Description=Minecraft Server (Spigot {{ minecraft_version }})
|
|
After=network-online.target
|
|
Wants=network-online.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
User={{ minecraft_user }}
|
|
Group={{ minecraft_group }}
|
|
WorkingDirectory={{ minecraft_server_dir }}
|
|
|
|
# Start command with optimized JVM flags
|
|
ExecStart=/usr/bin/java \
|
|
-Xms{{ minecraft_memory_min }}M \
|
|
-Xmx{{ minecraft_memory_max }}M \
|
|
{{ jvm_flags }} \
|
|
-jar {{ spigot_jar_name }} \
|
|
--nogui
|
|
|
|
# Stop command using mcrcon
|
|
ExecStop={{ minecraft_tools_dir }}/mcrcon -H localhost -P {{ rcon_port }} -p "{{ rcon_password }}" stop
|
|
|
|
# Restart settings
|
|
Restart=on-failure
|
|
RestartSec=10
|
|
StartLimitInterval=600
|
|
StartLimitBurst=3
|
|
|
|
# Security settings
|
|
PrivateTmp=yes
|
|
NoNewPrivileges=true
|
|
ProtectSystem=strict
|
|
ProtectHome=true
|
|
ReadWritePaths={{ minecraft_base_dir }}
|
|
ProtectKernelTunables=true
|
|
ProtectKernelModules=true
|
|
ProtectControlGroups=true
|
|
RestrictNamespaces=true
|
|
RestrictRealtime=true
|
|
RestrictSUIDSGID=true
|
|
LockPersonality=true
|
|
|
|
# Resource limits
|
|
LimitNOFILE=100000
|
|
LimitNPROC=512
|
|
|
|
# Logging
|
|
StandardOutput=journal
|
|
StandardError=journal
|
|
SyslogIdentifier=minecraft
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target |