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

Как запланировать мягкий перезапуск сервера Valheim

Окно обслуживания, systemd timer или cron, проверка следующего запуска и сохранения при остановке; отдельные правила обновлений и резервных копий.
Версия не проверена

Плановый перезапуск должен сначала завершить сервер с сохранением мира, затем снова запустить процесс. Начните с уже работающей и проверенной службы, например valheim.service. Расписание не исправляет ошибочный запуск, нехватку памяти или сбой загрузки мира.

Выберите окно обслуживания и часовой пояс

  1. Согласуйте с игроками подходящее окно по реальному времени посещений; универсального обязательного ежедневного интервала нет.
  2. Проверьте часовой пояс машины и планировщика. Контейнер или панель могут использовать другой пояс; сохраните время окна также в UTC.
  3. Выберите один механизм перезапуска и проверьте, не действует ли уже другой timer, cron или расписание панели.
  4. Разведите обслуживание, обновление и резервное копирование так, чтобы они не выполнялись одновременно.

Предупредите группу привычным согласованным способом либо выберите заведомо согласованное тихое окно. Само расписание не доказывает отсутствие игроков. Скрипт отправки сообщений, проверка онлайн-игроков и внешние интеграции в этот гайд не входят.

До включения расписания проверьте мягкую остановку

Для описанного Linux-сценария служба должна отправлять SIGINT, аналог Ctrl+C. В [Service] проверьте KillSignal=SIGINT и достаточный TimeoutStopSec. Значение 120 секунд в источнике — пример, а не гарантия для любого мира. Официальная документация systemd отдельно задаёт RestartKillSignal: если он установлен, при restart используется он; если отсутствует, применяется KillSignal.

Проверьте фактически загруженную службу и скрипт запуска. Запуск сервера через exec в переднем плане облегчает отслеживание основного процесса. При стандартном KillMode=control-group сигнал относится ко всей группе: отсутствие exec само по себе ещё не доказывает потерю сигнала. После таймаута systemd по умолчанию может перейти к SIGKILL, который не заменяет сохранение.

  1. Сделайте полную резервную копию используемых сохранений до изменения автоматизации. Для мира 1.0 не ограничивайтесь старой парой .db/.fwl.
  2. В согласованное окно выполните ручную проверку restart службы, например sudo systemctl restart valheim.service.
  3. Прочитайте journalctl -u valheim -n 100 --no-pager: найдите запись сохранения и нормального завершения до нового запуска.
  4. Проверьте загрузку правильного мира и сетевую готовность нового запуска. Одного состояния active недостаточно. Если были таймаут, принудительное завершение или ошибка запуска, сначала устраните причину.

Вариант 1: systemd timer

Ниже пример ежедневного окна в 05:00 по часовому поясу планировщика. Подставьте согласованное время и реальное имя своей службы. Каждая строка таблицы относится к указанному файлу; переносы внутри ячеек — отдельные строки конфигурации.

Файл · Содержимое
ФайлСодержимое
/etc/systemd/system/valheim-restart.service[Unit] Description=Restart the Valheim server [Service] Type=oneshot ExecStart=/usr/bin/systemctl restart valheim.service
/etc/systemd/system/valheim-restart.timer[Unit] Description=Scheduled Valheim restart [Timer] OnCalendar=*-*-* 05:00:00 Persistent=false [Install] WantedBy=timers.target
  1. После сохранения unit-файлов перечитайте их: sudo systemctl daemon-reload.
  2. Проверьте календарное выражение: systemd-analyze calendar "*-*-* 05:00:00". Сверьте рассчитанное время со своим окном.
  3. Включите timer: sudo systemctl enable --now valheim-restart.timer.
  4. Посмотрите systemctl list-timers 'valheim*': проверьте следующий запуск, а после наступления окна — журнал задачи и сервера.

Persistent=false не запускает пропущенное обслуживание сразу после позднего включения машины. Для задачи перезапуска это помогает не переносить тихое ночное окно на вечер. Это отличается от желаемого поведения некоторых резервных копий; не копируйте Persistent=true из backup-timer автоматически.

Вариант 2: cron вместо timer

Если уже используете cron, пример строки в /etc/cron.d/valheim-restart: 0 5 * * * root /usr/bin/systemctl restart valheim.service. Это те же 05:00 в часовом поясе cron машины. Поле root требуется для формата /etc/cron.d; в личном crontab поля пользователя нет. Не включайте одновременно этот пример и timer для одной задачи.

Проверьте результат первого планового запуска

  1. Сопоставьте реальное время запуска с выбранным часовым поясом и ожидаемым окном.
  2. Проверьте последовательность: сохранение при остановке, завершение, новый процесс, загрузка нужного мира, готовность подключения.
  3. Если сервер не вернулся, читайте первую ошибку нового запуска: завершённый shutdown не доказывает успешный start.
  4. При Crossplay проверьте актуальный join code после запуска; прежний код может измениться.

При ServerManager и других модах учитывайте их дополнительные требования к завершению. Например, опубликованный гайд ServerManager требует подтверждённого checkpoint с pending=0: одна строка World saved не доказывает получение каждого последнего действия клиента. Не приравнивайте успешный restart к гарантии отсутствия потерь прогресса.

Обновления и резервные копии — отдельные операции

Не добавляйте автоматическое обновление модифицированного набора в обычный restart. Сначала отдельно подтвердите поддержку версии игры модами и подготовьте резервную копию. Даже для vanilla решение об обновлении требует согласования версий клиентов и сервера; перезапуск сам по себе не обязан обновлять файлы игры.

Не копируйте живой каталог во время записи сохранения. Несколько минут после старта не гарантируют согласованность: сервер может снова сохранять мир. Для надёжной копии используйте проверенную процедуру при остановленном сервере либо механизм получения полного согласованного набора файлов. Сохраняйте весь актуальный каталог мира, включая путь, выбранный через -savedir, и отдельную копию вне машины.

Если сервер уже работает в контейнере

Не переносите примерные значения сторонней статьи на любой образ. В сохранённом README community-valheim-tools отдельно заданы RESTART_CRON, RESTART_IF_IDLE, UPDATE_CRON и UPDATE_IF_IDLE, а TZ определяет пояс контейнера. Пустая строка отключает соответствующее cron-расписание. Проверьте документацию именно используемого образа; RESTART_IF_IDLE не является универсальной функцией systemd timer.

Информация
Гайд подготовлен по сохранённым EN-источникам RE:NODE, документации systemd и README community-valheim-tools. Службы, расписания, сигналы и резервные копии здесь не создавались и не запускались. Примеры требуют проверки в вашей среде; рецепт Python, внешние уведомления и автоматическое обновление модов исключены.

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