unity

Участник
Сообщения
242
Реакции
133
Большинство используют обновление серверов по крону и некоторые плагинами. У SteamCMD есть нативный способ обновление серверов без крона и сторонних плагинов. Многие об этом знают или слышали, но мало кто знает, как правильно настроить, а если и настроили, но не обновляется - возвращаются опять по старинке обновлять по крону, так и не попытавшись разобраться.

Требование:
  • linux
  • vps/vds
  • SteamCMD
В папке /steamcmd сделать копию файла steamcmd.sh и переименовать его в steam.sh
Переименованный файл steam.sh закинуть в туже папку /steamcmd и выставить права файла 700
в папке /steamcmd/linux32/ сделать копию файла steamcmd и переименовать его в steam
переименованный файл steam закинуть в туже папку /steamcmd/linux32/ и выставить права файла 700

В папке /steamcmd/
создать файл с любым именем. На пример у меня update_aim.txt В текстовом файле вставляем содержимое:

@ShutdownOnFailedCommand 1
@NoPromptForPassword 1
login anonymous
force_install_dir ../aimserv
app_update 740
quit

Прошу заметить:
force_install_dir ../aimserv // Имя папки сервера у вас своё

Создать файл с любым именем в корень папки сервера. с расширением .sh (Это важно!) и выставить права файла 700 На пример у меня /home/unity/aimserv/aimstart.sh

Cкопируйте у меня содержимое и отредактируйте под себя и вставьте его в созданный файл с расширением .sh

screen -A -m -d -S aimserv /home/unity/aimserv/srcds_run -autoupdate -steam_dir /home/unity/steamcmd/ -steamcmd_script /home/unity/steamcmd/update_aim.txt -game csgo -console -usercon +net_public_adr 0.0.0.0 +ip 0.0.0.0 -maxplayers_override 24 -tickrate 128 -port 27037 +tv_port 37037 +game_type 0 +game_mode 0 +host_workshop_collection 485684628 +workshop_start_map 2240626180 -secure +sv_lan 0 -condebug -debug +clientport 47037

Прошу заметить:
  • screen -A -m -d -S aimserv // aimserv - Это папка сервера, У вас своё имя
  • /home/unity/aimserv/srcds_run // У вас свой путь к файлу srcds_run
  • -autoupdate // Запускает автоматическое обновление
  • -steam_dir /home/unity/steamcmd/ // у вас свой путь к папке steamcmd
  • -steamcmd_script /home/unity/steamcmd/update_aim.txt // у вас свой путь к файлу со своим именем, в котором есть содержимое для авторизауии SteaCMD
Все остальные настройки запуска сервера у вас свои

В server.cfg или конфиг режима вставить переменную sv_hibernate_when_empty 1 // Если у вас присутствует в конфиге эта переменная, но стоит значение 0, автоматическое обновление не сработает и будет каждые 10 секунд сервер уходить в краш, когда выйдет обновление. Убедитесь, что переменная sv_hibernate_when_empty ни в каких конфигах больше не повторяется с другим значением.

Когда выходит обновление - игроков сообщает, что сервер через 10 секунд перезагрузится для обновление. Если нет игроков, то сервер сразу уходит на перезагрузку для обновления.

Вот и всё! Если что то не понятно - задавайте вопросы в комментариях! Отвечу всем. )

Не забудьте удалить свои кроны на автоматическое обновления по времени! в crontab
 
Последнее редактирование:

Arthur Don

Участник
Сообщения
1,696
Реакции
256
@unity, и как будет происходить обнова сервера? Сразу при выходе или при перезапуске сервера?
 

unity

Участник
Сообщения
242
Реакции
133
@unity, и как будет происходить обнова сервера? Сразу при выходе или при перезапуске сервера?
Как только выходит обновление - игроков сообщает в чате ,что через 10 секунд сервер пере запустится и уйдёт в обновление. Если на сервере нет игроков, то сервер сразу уйдёт в обновление.
Сообщения автоматически склеены:

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

EVG

Участник
Сообщения
135
Реакции
6
А на Windows есть подобное?
 

Shichika

Участник
Сообщения
36
Реакции
2
А можно как-то сделать так, чтобы сервер подождал пока на сервере будет 0 человек и только тогда начал обновляться?
 

Fanyatsu

Шизофреник со стажем
Сообщения
1,030
Реакции
341
А можно как-то сделать так, чтобы сервер подождал пока на сервере будет 0 человек и только тогда начал обновляться?

На основе этого плагина можно сделать, но там нет конкретно этого функционала, зато есть время до рестарта, запароливание перед рестартом, уведомление в худе, а при кике с сервера объясняется, что он на обнову выключился
 

unity

Участник
Сообщения
242
Реакции
133
А можно как-то сделать так, чтобы сервер подождал пока на сервере будет 0 человек и только тогда начал обновляться?
если на сервере есть игроки - то в конце матча произойдёт обновление сервера. Если на сервере никого нет - обновляется сразу
Сообщения автоматически склеены:

На основе этого плагина можно сделать, но там нет конкретно этого функционала, зато есть время до рестарта, запароливание перед рестартом, уведомление в худе, а при кике с сервера объясняется, что он на обнову выключился
Не вижу смысла в плагине потому, что SteamCMD сам понимает, когда надо обновлять сервер. Если конечно сервер на ОС Linux ))
 

Fanyatsu

Шизофреник со стажем
Сообщения
1,030
Реакции
341
Не вижу смысла в плагине потому, что SteamCMD сам понимает, когда надо обновлять сервер. Если конечно сервер на ОС Linux ))
Дебиан любименький. Сервер просто начинает умолять "перезагрузи меня", несмотря на прописанный скрипт обновления. А плагин выше реагирует сразу, перезагружает и steamCmd качает обнову. Почитал твою тему, может гибернация влияет, но раз так у меня всё работает, не буду трогать эту хрупкую конструкцию))
 

unity

Участник
Сообщения
242
Реакции
133
Дебиан любименький. Сервер просто начинает умолять "перезагрузи меня", несмотря на прописанный скрипт обновления. А плагин выше реагирует сразу, перезагружает и steamCmd качает обнову. Почитал твою тему, может гибернация влияет, но раз так у меня всё работает, не буду трогать эту хрупкую конструкцию))
Для автоматического обновление гибернация должна быть включена. Если она у тебя отключена - её нужно включить. Да, в гибернации - когда нет игроков не отображает статус карты, но это не значит, что с сервером что то не то. при подключении игрока на сервер - карта снова показывает статус. У меня всё нормально с автоматической обновой. Я бы не писал инструкцию, если бы не работало ))
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #11
Для автоматического обновление гибернация должна быть включена. Если она у тебя отключена - её нужно включить.
Тем самым сломав часть плагинов. Гениальное решение.

Не вижу смысла в плагине потому, что SteamCMD сам понимает, когда надо обновлять сервер. Если конечно сервер на ОС Linux ))
Он тут не причём, кстати. SteamCMD-то.
Параметры -steam_dir и -steamcmd_script обрабатываются скриптом, который в свою очередь сервер и запускает. Тот просто сам дохнет, когда нужно, если видит -autoupdate в параметрах запуска. Так что, по сути, такое можно реализовать и на Windows. Но немного другим способом.
 
Последнее редактирование:

unity

Участник
Сообщения
242
Реакции
133
Тем самым сломав часть плагинов. Гениальное решение.


Он тут не причём, кстати. SteamCMD-то.
Параметры -steam_dir и -steamcmd_script обрабатываются скриптом, который в свою очередь сервер и запускает. Тот просто сам дохнет, когда нужно, если видит -autoupdate в параметрах запуска. Так что, по сути, такое можно реализовать и на Windows. Но немного другим способом.
У меня плагины не ломаются. Какие часть плагинов ломаются, если при подключение первого игрока сервера - (Выхода из гибернации) плагины перезагружаются? На личном опыте проверял.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #13
@unity, те самые, которые должны что-то делать с самого старта, например.
И плагины не перезагружаются. Они только начинают работать, потому что во время гибернации не вырабатываются кадры, от которых работа виртуальной машины SourcePawn и зависит.

В любом случае, то, что у тебя плагины не ломаются, не означает, что отметить этот важный факт о возможном отвале части сервера - не надо.
 

unity

Участник
Сообщения
242
Реакции
133
@unity, те самые, которые должны что-то делать с самого старта, например.
И плагины не перезагружаются. Они только начинают работать, потому что во время гибернации не вырабатываются кадры, от которых работа виртуальной машины SourcePawn и зависит.

В любом случае, то, что у тебя плагины не ломаются, не означает, что отметить этот важный факт о возможном отвале части сервера - не надо.
Это какой плагин должен быть, чтобы он отваливался после пробуждение сервера из гибернации? Есть хотя бы пример плагинов, которые во время пробуждение сервера из гибернации отваливаются?
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #15
Это какой плагин должен быть, чтобы он отваливался после пробуждение сервера из гибернации?
Чем читаешь?
Я говорю, что есть класс плагинов, которые должны делать что-то прямо с самого запуска сервера. А гибернация не даёт им полноценно встать. Максимум OnPluginStart() отработает с AskPluginLoad2() и OnMapStart(), и всё. Все каллбеки и прочее - идёт нахрен, пока кто-то не зайдёт. А за это время данные в каллбеке могут и стухнуть.
 

Delfram

Добрая душа
Сообщения
155
Реакции
136
По новым правилам в файле как указано в примере update_aim.txt установку каталога(force_install_dir) рекомендуется делать перед логином(login), иначе будет обновление с валидацией.
Please use force_install_dir before logon!
 

Fanyatsu

Шизофреник со стажем
Сообщения
1,030
Реакции
341
По новым правилам в файле как указано в примере update_aim.txt установку каталога(force_install_dir) рекомендуется делать перед логином(login), иначе будет обновление с валидацией.
Please use force_install_dir before logon!
Да, было такое уже. При чём этап валидации сломался и он стал закачивать файлы игры с нуля бесконечно, не очищая кеш, в итоге за ночь от места на диске осталось ничего =)
Тоже так сделал и уже месяц или больше всё нормально
 
Сверху Снизу