Служба systemd — правильный способ держать что-либо постоянно запущенным в Linux: она сама стартует после перезагрузки, снова поднимается после падения и записывает в журнал всё, что выводит программа. В примере используется сервер Minecraft, но так можно запустить что угодно.
1. Отдельный пользователь для сервера
Лучше не запускать сервер от имени root: если кто-то проникнет через игру, он не получит контроль над всей машиной.
adduser --disabled-password --gecos "" minecraft
# скопируйте сервер в /home/minecraft/server и назначьте владельца:
chown -R minecraft:minecraft /home/minecraft/server
2. Файл службы
Создайте файл /etc/systemd/system/minecraft.service:
[Unit]
Description=Minecraft server
After=network-online.target
Wants=network-online.target
[Service]
User=minecraft
WorkingDirectory=/home/minecraft/server
ExecStart=/usr/bin/java -Xms4G -Xmx4G -jar paper.jar --nogui
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
Замените WorkingDirectory и ExecStart на каталог и команду вашего сервера. Всегда указывайте полные пути (путь к Java покажет which java).
3. Включите службу
systemctl daemon-reload
systemctl enable --now minecraft
enable включает запуск вместе с VPS, а --now сразу запускает службу.
Повседневное управление
systemctl status minecraft # работает ли сервер?
systemctl restart minecraft # перезапустить
systemctl stop minecraft # остановить
journalctl -u minecraft -f # смотреть консоль в реальном времени (выход — Ctrl + C)
А как же консоль игры?
Когда сервер работает как служба, вводить команды прямо в его консоль нельзя. Для управления используйте RCON (он есть в Minecraft, Rust, ARK и Palworld) или команды в самой игре с правами администратора. При systemctl stop Minecraft сохраняет мир перед закрытием.
Если вам удобнее, чтобы консоль всегда была под рукой, и вы готовы сами запускать сервер после каждой перезагрузки, возможно, вам больше подойдут screen или tmux.