Перейти к содержанию

Как запускать сервер Valheim как службу systemd

Собственный стартовый скрипт, unit, SIGINT, проверка сохранения при остановке и диагностика crash loop через journalctl.
Версия не проверена

Уже установленный Linux-сервер Valheim можно передать под управление systemd: запускать при загрузке, перезапускать после сбоя и останавливать с ожиданием сохранения. Ниже — отдельная системная служба для одного сервера, а не установка SteamCMD или настройка нескольких миров.

Подготовьте пользователя, пути и скрипт

Пример из англоязычного руководства RE:NODE от 14 октября 2026 года использует пользователя и группу valheim, каталог /home/valheim/server и собственный стартовый скрипт start_valheim.sh. Подставьте реальные существующие имена и абсолютные пути своей системы. У пользователя должны быть права на установку и используемые сохранения; запускать сам игровой процесс от root не требуется.

  1. Убедитесь, что сервер уже запускается обычным способом и что второго процесса с теми же портами и миром нет.
  2. Перед изменением владельца, путей или параметров сохранений сохраните полную резервную копию актуального мира и конфигурации. Не ограничивайте мир Valheim 1.0 только парой .db/.fwl.
  3. Сделайте собственную копию поставляемого start_server.sh: официальный гайд предупреждает, что оригинал заменяется при обновлении.
  4. Сохраните необходимые переменные и параметры из поставляемого скрипта. В собственной копии запускайте valheim_server.x86_64 через exec в переднем плане, без фонового &.
  5. Дайте своей копии право исполнения: 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, а не переносите ключи между разделами наугад.

Подключите службу и проверьте запуск

  1. После сохранения файла выполните sudo systemctl daemon-reload. Повторяйте это после изменения unit-файла.
  2. Для включения автозапуска и немедленного старта: sudo systemctl enable --now valheim.
  3. Посмотрите systemctl status valheim: проверьте состояние и ошибки запуска.
  4. Откройте журнал: journalctl -u valheim -f. Убедитесь, что сервер прошёл обычную загрузку мира и подключение, а не только получил статус запущенного процесса.

Проверьте корректную остановку

Официальный гайд рекомендует завершать выделенный сервер через Ctrl+C. В этой службе KillSignal=SIGINT задаёт начальный сигнал остановки, а TimeoutStopSec=120 — пример ожидания. По документации systemd стандартный KillMode=control-group относится ко всей группе процессов; нельзя утверждать, что любая оболочка без exec всегда лишит дочерний процесс сигнала.

  1. Выберите подходящее время и предупредите игроков о проверке остановки.
  2. Выполните sudo systemctl stop valheim.
  3. Проверьте journalctl -u valheim -n 40 --no-pager: найдите сообщения о записи мира и нормальном завершении процесса. Одной строки Stopped недостаточно, чтобы доказать сохранение мира.
  4. Если журнал показывает таймаут или status=9/KILL, проверьте загруженный unit, KillSignal, запуск через exec и время реального сохранения. Увеличивайте ожидание по наблюдениям, а не считайте 120 секунд гарантией.
  5. После успешной проверки запустите sudo systemctl start valheim. Плановый sudo systemctl restart valheim включает остановку и последующий запуск.
Информация
После истечения времени ожидания systemd по умолчанию может завершить оставшиеся процессы через SIGKILL. Такой исход не заменяет сохранение. systemctl kill, авария хоста и нехватка памяти также не эквивалентны проверенной плановой остановке; резервные копии остаются необходимы.

Разберите сбой до сброса лимита

При 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. Обновления, расписания и лимиты ресурсов настраивайте отдельно после проверки базового жизненного цикла.

Информация
Гайд подготовлен по сохранённым EN-источникам и документации systemd, без выполнения команд на Linux-хосте. Сервис, права, сохранение мира и автозапуск в реальной среде не проверялись. Рецепт живого tar-бэкапа из сторонней статьи сюда не перенесён.

Гайд был полезен?