Как запускать сервер Valheim как службу systemd
Уже установленный Linux-сервер Valheim можно передать под управление systemd: запускать при загрузке, перезапускать после сбоя и останавливать с ожиданием сохранения. Ниже — отдельная системная служба для одного сервера, а не установка SteamCMD или настройка нескольких миров.
Подготовьте пользователя, пути и скрипт
Пример из англоязычного руководства RE:NODE от 14 октября 2026 года использует пользователя и группу valheim, каталог /home/valheim/server и собственный стартовый скрипт start_valheim.sh. Подставьте реальные существующие имена и абсолютные пути своей системы. У пользователя должны быть права на установку и используемые сохранения; запускать сам игровой процесс от root не требуется.
- Убедитесь, что сервер уже запускается обычным способом и что второго процесса с теми же портами и миром нет.
- Перед изменением владельца, путей или параметров сохранений сохраните полную резервную копию актуального мира и конфигурации. Не ограничивайте мир Valheim 1.0 только парой .db/.fwl.
- Сделайте собственную копию поставляемого start_server.sh: официальный гайд предупреждает, что оригинал заменяется при обновлении.
- Сохраните необходимые переменные и параметры из поставляемого скрипта. В собственной копии запускайте valheim_server.x86_64 через exec в переднем плане, без фонового &.
- Дайте своей копии право исполнения: chmod +x /home/valheim/server/start_valheim.sh — путь здесь пример.
exec заменяет оболочку игровым процессом, поэтому systemd непосредственно отслеживает сервер как основной процесс. Не копируйте вслепую регистр SteamAppId из сторонней статьи: сохраните штатные настройки окружения своей поставки. Не переносите примерный пароль автора в рабочую конфигурацию.
Создайте valheim.service
Файл системной службы размещается в /etc/systemd/system/valheim.service. Ниже каждая строка таблицы — отдельная строка файла; имена пользователя, группы и оба пути замените согласованно. Значения таймаутов и лимита запусков — пример политики из источника, а не универсальные требования.
| Раздел | Строки файла по порядку |
|---|---|
| [Unit] | Description=Valheim dedicated server Wants=network-online.target After=network-online.target StartLimitIntervalSec=600 StartLimitBurst=4 |
| [Service] | Type=simple User=valheim Group=valheim WorkingDirectory=/home/valheim/server ExecStart=/home/valheim/server/start_valheim.sh KillSignal=SIGINT TimeoutStopSec=120 Restart=on-failure RestartSec=15 |
| [Install] | WantedBy=multi-user.target |
Type=simple требует оставлять процесс в переднем плане. WorkingDirectory задаёт рабочий каталог для относительных путей к библиотекам и бинарнику. Wants/After связывают старт с network-online.target. Restart=on-failure повторяет запуск после сбоя с паузой 15 секунд; обычная остановка через systemctl stop не должна немедленно запускать сервер снова.
StartLimitIntervalSec=600 и StartLimitBurst=4 ограничивают частые запуски в десятиминутном интервале. По текущему примеру они находятся в [Unit]. Если ваша версия systemd сообщает неизвестный ключ, сверьте синтаксис локальной man systemd.unit, а не переносите ключи между разделами наугад.
Подключите службу и проверьте запуск
- После сохранения файла выполните sudo systemctl daemon-reload. Повторяйте это после изменения unit-файла.
- Для включения автозапуска и немедленного старта: sudo systemctl enable --now valheim.
- Посмотрите systemctl status valheim: проверьте состояние и ошибки запуска.
- Откройте журнал: journalctl -u valheim -f. Убедитесь, что сервер прошёл обычную загрузку мира и подключение, а не только получил статус запущенного процесса.
Проверьте корректную остановку
Официальный гайд рекомендует завершать выделенный сервер через Ctrl+C. В этой службе KillSignal=SIGINT задаёт начальный сигнал остановки, а TimeoutStopSec=120 — пример ожидания. По документации systemd стандартный KillMode=control-group относится ко всей группе процессов; нельзя утверждать, что любая оболочка без exec всегда лишит дочерний процесс сигнала.
- Выберите подходящее время и предупредите игроков о проверке остановки.
- Выполните sudo systemctl stop valheim.
- Проверьте journalctl -u valheim -n 40 --no-pager: найдите сообщения о записи мира и нормальном завершении процесса. Одной строки Stopped недостаточно, чтобы доказать сохранение мира.
- Если журнал показывает таймаут или status=9/KILL, проверьте загруженный unit, KillSignal, запуск через exec и время реального сохранения. Увеличивайте ожидание по наблюдениям, а не считайте 120 секунд гарантией.
- После успешной проверки запустите sudo systemctl start valheim. Плановый sudo systemctl restart valheim включает остановку и последующий запуск.
Разберите сбой до сброса лимита
При Result: start-limit-hit сначала читайте journalctl -u valheim -b --no-pager и ищите первый сбой. Возможные направления проверки из источника: отсутствующая библиотека, занятый порт, ошибка BepInEx или загрузки мира. Исправьте причину; затем используйте sudo systemctl reset-failed valheim и sudo systemctl start valheim. Повторный сброс без исправления только возобновит цикл.
Выберите журнал и границы автоматизации
Для наблюдения используйте journalctl -u valheim -f, для текущей загрузки — journalctl -u valheim -b, для последних строк — journalctl -u valheim -n 200 --no-pager. При работе со стандартным выводом systemd может собирать сообщения в journal; параметр -logFile задаёт отдельный файл игры. Проверяйте выбранное место фактических сообщений.
На некоторых системах journal хранится только в памяти и теряется после перезагрузки: не принимайте его долговечность за установленный факт. Основная служба здесь не обновляет игру на каждом старте и не содержит MemoryMax. Обновления, расписания и лимиты ресурсов настраивайте отдельно после проверки базового жизненного цикла.
Гайд был полезен?