Остальные могут читать дальше.
Особо радоваться не советую, я тут по идее за помощью обращаюсь, а не решение пишу :)
Ситуация конкретная - винда без вариантов.
Захотел сотворить сие на винде (2003 х64 СП2 вроде). Какой сервак дали - такой дали, тут я не виноват.
Сервера ТФ2 на стимэму (это не суть важно, что на стимэму, не об этом сейчас речь).
Себе поставил условия.
1. Естественно чтоб в одной папке
2. Метамод + сорсмод, при этом разный набор сорсмод-плагинов для каждого сервера.
3. Запуск от пользователя с ограниченными правами (runas.exe) автоматически при старте сервера (ну или хотя бы при логоне учетной записи с правами админа)
4. Автоматический рестарт сервера после падения (watchdog)
Сразу скажу, что изначально хотел сделать все как можно проще. Но винда внесла свои коррективы.
Папку сделал, плагины в одном (для начала сойдет) экземпляре настроил. Первая задача - запустить под юзером с ограниченными правами.
Тут начались затыки. Юзер есть, права есть. Задача - сунуть в автозагрузку профиля батник с запуском сервера с ограниченными правами. НО. Команда runas создает новое окно, в нем просит указать пароль. Не беда, пароль на юзера можно автоматом указать либо на WSH-скрипте
либо командой echo, либо с использованием сторонней программы (sanur, steelrun, RunasSpc - с шифрованием).WshShell = WScript.CreateObject("WScript.Shell") ;
//запускаем с правами другого пользователя
WshShell.Run("runas /user:GAMESERVER\\tf2user \"C:\\tf2server\\orangebox\\srcds.exe -game tf -console +map ctf_2fort\"");
WScript.Sleep(500);
WshShell.AppActivate("runas.exe");
//пароль
WshShell.SendKeys("PASSWORD");
WScript.Sleep(100);
WshShell.SendKeys("~");
А дальше веселее. Ну запустили, может даже заработает. А как это в цикл засунуть (рестарт после падения) ? Если пихать в цикл, который начинается с команды "start", то гемор продолжается, потому что она тоже создает новое окно! А тупо запускать нельзя (без /wait, который есть только у start), потому как накидает тебе серверов - закрывать не успеешь.
Понял, что можно разрулить это дело одним хорошим WSH-скриптом, только вот в программировании не силен, да и по сравнению с FireDaemon'ом, к которому и пришел в оконцовке, для незнающего человека оно как-то сложно. Но что можно разрулить - это однозначно. Если есть знатоки - прошу помощи, давайте этот топик сделаем для других людей!
Ладно, допустим с помощью FireDaemon'a проблему запуска-рестарта с ограничением прав мы решили.
Но тут всплывают баги плагинов. Поясняю как в идеале делается запуск 2-х серверов из одной папки.
Создаете копии файла srcds.exe и обзываете их srcds1.exe и srcds2.exe. Соответственно в папке аддонов создаете папки sourcemod1 и sourcemod2, так как пока "однопапочность" сорсмода толком не реализована. Можно конечно и в одной папке, но тогда надо мегаконфиг создавать, где список загружаемых плагинов рисовать и параметры, так как все БУДЕТ различаться, начиная с логов.
Пример1
Метамод 1.6.2 (можно и 1.7), Сорсмод 1.1
srcds1.exe -heapsize 786432 -tickrate 66 -console -game tf -ip 91.196.207.67 -port 27015 +sv_lan 0 +maxplayers 33 +map ctf_2fort +servercfgfile server_1.cfg +motdfile motd_1.txt +mapcyclefile mapcycle_1.txt +sv_logsdir logs_1 +mm_pluginsfile addons/metamod/metaplugins_1.ini
srcds2.exe -heapsize 786432 -tickrate 100 -console -game tf -ip 91.196.207.67 -port 27016 +sv_lan 0 +maxplayers 33 +map ctf_2fort +servercfgfile server_2.cfg +motdfile motd_2.txt +mapcyclefile mapcycle_2.txt +sv_logsdir logs_2 +mm_pluginsfile addons/metamod/metaplugins_2.ini
in the end of server_1.cfg:
exec sourcemod/sourcemod1.cfg
in the end of server_2.cfg:
exec sourcemod/sourcemod2.cfg
Так вот, сначала метамод ругается на то, что не может загрузить sourcepawn.jit.x86.dll от сорсмода в соответствующей папке, но если ее подпихнуть в папку sourcemod\bin, то все равно не грузится. Короче при таком раскладе (папке сорсмода отличной от sourcemod1) работоспособности добиться пока не удалось.
Почему и прошу поддержки. У кого имеется опыт - подскажите, как все 4 задачи малой кровью реализовать?