Строчные ссылки на файлы модов и своё ожидание готовности
Игра приводит путь к вложенным файлам анимаций в нижний регистр целиком, вместе с именем папки мода. На Linux такие файлы не находятся, и сервер сыплет в лог сотнями FileNotFoundException. Кнопка на вкладке «Моды» раскладывает рядом строчные симлинки: файлы модов не меняются, повторный запуск после докачки безопасен, а на файловых системах без различия регистра кнопка честно говорит, что делать нечего. Ожидание строки о готовности стало настройкой профиля со значением по умолчанию 30 минут вместо общих 15. Сборке на три сотни модов пятнадцати не хватает, и панель объявляла бы работающим сервер, который ещё никого не пустит. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -42,10 +42,8 @@ var (
|
||||
// playersPollInterval — как часто менеджер спрашивает у сервера список игроков.
|
||||
const playersPollInterval = 30 * time.Second
|
||||
|
||||
// startupGrace — сколько ждём строку о готовности. Загрузка мира с модами
|
||||
// занимает минуты, поэтому запас большой: раньше времени объявлять сервер
|
||||
// работающим хуже, чем подождать.
|
||||
const startupGrace = 15 * time.Minute
|
||||
// Сколько ждать строку о готовности — свойство профиля: сборка на сотни модов
|
||||
// грузится в разы дольше ванильной. См. config.Profile.StartupWait.
|
||||
|
||||
// restartDelay — пауза перед автоподъёмом упавшего сервера.
|
||||
const restartDelay = 10 * time.Second
|
||||
@@ -558,15 +556,19 @@ func (s *Supervisor) WaitStopped(timeout time.Duration) bool {
|
||||
// вечное «Запускается» лишило бы панель опроса игроков.
|
||||
func (s *Supervisor) checkStartupGrace() {
|
||||
s.mu.Lock()
|
||||
// Ждём столько, сколько задано у профиля, с которым сервер запускался:
|
||||
// активный профиль могли переключить, а мир грузится по старому.
|
||||
wait := s.profile.StartupWait()
|
||||
overdue := s.state == StateStarting && !s.startedAt.IsZero() &&
|
||||
time.Since(s.startedAt) > startupGrace
|
||||
time.Since(s.startedAt) > wait
|
||||
if overdue {
|
||||
s.state = StateRunning
|
||||
}
|
||||
s.mu.Unlock()
|
||||
|
||||
if overdue {
|
||||
s.AppendLog("manager", "Сервер не сообщил о готовности — считаю его запущенным")
|
||||
s.AppendLog("manager", fmt.Sprintf(
|
||||
"Сервер не сообщил о готовности за %s — считаю его запущенным", wait))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user