minecraft.service 文件配置
# /etc/systemd/system/minecraft.service
[Unit]
Description=Minecraft Fabric Server
After=network.target
Wants=network-online.target[Service]
User=mcfabricuser
Group=mcfabricuser
WorkingDirectory=/minecraft/1.21.1-fabric-server
ExecStart=/usr/bin/java -Xms1G -Xmx4G -XX:+UseG1GC -jar fabric-server-mc.1.21.1-loader.0.16.10-launcher.1.0.1.jar nogui
ExecStop=/usr/bin/mcrcon -H 127.0.0.1 -P 25575 -p your_rcon_password stop
ExecStopPost=/bin/sleep 10
Restart=on-failure
RestartSec=10
TimeoutStopSec=120
KillMode=process
MemoryLimit=6G
OOMScoreAdjust=-999
StandardOutput=append:/minecraft/1.21.1-fabric-server/minecraft.log
StandardError=append:/minecraft/1.21.1-fabric-server/error.log
WatchdogSec=60
ExecStartPre=/usr/bin/touch /tmp/minecraft-ready
ExecStartPost=/usr/bin/touch /tmp/minecraft-running[Install]
WantedBy=multi-user.target
# /etc/systemd/system/minecraft-backup.service
[Unit]
Description=Minecraft World Backup
Requires=minecraft.service
After=minecraft.service[Service]
Type=oneshot
User=mcfabricuser
Group=mcfabricuser
WorkingDirectory=/minecraft/1.21.1-fabric-server
ExecStartPre=/usr/bin/mcrcon -H 127.0.0.1 -P 25575 -p your_rcon_password save-all flush # 強制保存世界
ExecStartPre=/usr/bin/mcrcon -H 127.0.0.1 -P 25575 -p your_rcon_password save-off # 禁用自動保存
ExecStart=/bin/bash -c "tar -cvpzf backups/world_$(date +%%F-%%H%%M).tar.gz world"
ExecStartPost=/usr/bin/mcrcon -H 127.0.0.1 -P 25575 -p your_rcon_password save-on # 恢復自動保存
ExecStartPost=/bin/echo 'Backup completed at $(date)' >> backups/backup.log# 失敗時記錄日志
ExecStopPost=/bin/sh -c 'if [ $? -ne 0 ]; then echo "Backup failed at $(date)" >> backups/backup.log; fi'
# /etc/systemd/system/minecraft-backup.timer
[Unit]
Description=Daily Minecraft Backup Timer[Timer]
# 每天凌晨4點執行
OnCalendar=*-*-* 04:00:00
# 如果錯過時間,開機后補執行
Persistent=true
# 允許1小時時間窗口
AccuracySec=1h [Install]
WantedBy=timers.target
# 設置權限
sudo chown -R mcfabricuser:mcfabricuser /minecraft
sudo chmod 644 /etc/systemd/system/minecraft*.{service,timer}
# 啟動服務
sudo systemctl daemon-reload
sudo systemctl enable minecraft.service minecraft-backup.timer
sudo systemctl start minecraft.service minecraft-backup.timer
# 驗證服務狀態
systemctl status minecraft.service
journalctl -u minecraft-backup.service -f # 手動觸發一次備份測試
# server.properties 開啟 mcrcon
enable-rcon=true
rcon.password=your_rcon_password
rcon.port=25575
注意事項:
- RCON 配置:確保 server.properties 中的 rcon.password 和 rcon.port 與服務文件一致。
- 防火墻:若使用非本地 RCON,需開放 25575 端口。
- 備份驗證:定期檢查 /minecraft/…/backups 目錄下的備份文件是否完整。