/bin/bash PIDFILE=/home/gamer/hlds_classic/cs.pid comands=./hlds_run -game cstrike -nomaster +map cs_assault +port 27015 -maxplayers 24 +mp_freezetime 3 +exec server.cfg -pingboost 1 +sys_ticrate 10000 +sv_maxupdaterate 100 RETVAL=0 path=/home/gamer/hlds_classic start() { if [ -d 036;path ]; then cd 036;path start-stop-daemon --start --background --make-pidfile --pidfile 036;{PIDFILE} --chuid gamer -a 036;{comands} но при запуске ./test start start-stop-daemon: group `ame39; not found Кажеться дело в том что он строку comands=./hlds_run -game воспринимает как продолжение команды.
Расскажу ))Изначально скрипт был такй pastebin_com/m5d5bef87Всё было хорошо пока сервер был один. после того как я поставил второй сервер, с измененым для него скриптом запуска. По команде skript_name stop у меня прибиваються оба сервера а не тот для которого я делаю стоп. оно и понятно вот тут Код:if [ -f 036;path/cstrike_run ]; then killall hlds_run killall hlds_i686 cd 036;path rm -R ./cstrike_runпросто глушатся процессы с именем hlds_run а они одинаковы. Вот решил что останавливать надо по умному писать в pid файл id процесса и на команде стоп выдирать id из пид файла и делать kill id. К сожалению как записать id процесса в пид файл я не нашел. Подсказали что нужно использовать даемон.Вместо нижнего подчеркивания в ссылке поставте точку.
может, тогда проще так?(к примеру)start() {if [[ `ps -ae | grep 39;hl.exe39;` == 39;39; ]]; then { если серверов пока не запущеноecho Run First CStrike serverwine ./hl.exe -opengl -game cstrikepidof hl.exe gt; ./both_pids} если хоть один уже работаетelse {echo Run Second CStrike serverwine ./hl.exe -opengl -game cstrike фактически, мы можем запустить хоть десять приложений, все их PID будут отличаться друг от друга в бОльшую сторону, ключ pidof -s заставит выдать последний присвоенный pid, если их несколько. pidof -s hl.exe gt;gt; ./both_pids}; fi}stop() { мы запустили несколько процессов, все их PID выстроены в столбик по одному, и командой cat мы их нумеруем по порядку, таким образом, в 036;1 мы можем указать всего лишь порядковый номер приложения, т.е. каким по счету мы его запускали - первым, вторым, пятидесятым . естественно, указать сразу мы можем хоть десяток, через пробел)kill `cat ./both_pids -n | grep 39;092;lt;39;036;{1}39;092;gt;39; | cut -f2` или форсировано казнить всехнах Х) kill -9 `cat ./both_pids -n | grep 39;092;lt;39;036;{1}39;092;gt;39; | cut -f2` также для ULTRA KILLif [[ 036;{1} == 39;--all39; ]]; then kill -9 `cat ./both_pids`; fi}*поправил в 13:45 по дефолт-сити)просто была уязвимость - при запуске от рута (хоть нормальный человек и не стал бы запускать wine из-под рута,) скрипт мог убить init и ядерные процессы
Не сказал бы что проще Мне надо управлять серверами гибко, они все разные. Например запустить второй а первый стопнуть наоборот, а потом через 5 минут, рестартануть 3й сервер. Поэтому я делал все отдельными скрпиптами.П.С Сервера контры кстати в отличие от самой контры нативные поэттому они не через вине.
А нафига столько?%)^UИ чем они так отличаются?)Ты сам написал К сожалению как записать id процесса в пид файл я не нашел к тому же наверху больше моих комметариев с вариантами, а строчек кода там всего 13) можно конечно завести папочку, и там плодить на каждый процесс собственный файл с его PID, только надо ли? О_о
Ну вообще там на одном физическом сервер будет несколько игровых(физических тоже несколько). Одних контровых планирую 3-5 только(на самом деле это очень мало даже). Это игровой проект для одного крупного провайдера в одном крупном городе. Отличаються модами. Первый это паблик контра, стандартная всем известная, вторая это биохазард мод, Потом gan mode, еще возможно версия для клан варов. Ну и тд.
Вся проблемма в том что ./hlds_run -game букву g он воспригнимает как параметр для start-stop-daemon .Я уже пробовал по разному ковычить их не получаеться почему то.