Скрипты запуска

HooLIGUN

MatchMaking CS:S / RGMIX.ru
Сообщения
1,064
Реакции
267
Привет всем, поделителсь, кому не жалко пожалуйста скриптами запуска серверов.
Или кто знает, помогите составить более менее оптимальный скрипт для нескольких серверов.
Суть в том, что серверов 10 штук, адрес у них всех одинаковый, отличаются только последней цифрой, например
/home/servers/srv1
/home/servers/srv2
и т.д.
Сейчас я запускаю так
в каждой папке сервера имеется 2 файла:
1.sh и 2.sh
в 1.sh
C-подобный:
#!/bin/bash
taskset -c 1 screen -S srv3 -m -d ./startnik.sh
2.sh:
C-подобный:
while true
do
kill -9 $( lsof -i:$PORT -t )
sleep 2
./srcds_run -game cstrike -port 27015  +tv_port 37015 +maxplayers 16  +map de_dust
echo Restarting in 5 Seconds...
sleep 5
done
И запускаются все сервера так start_servers.sh
C-подобный:
#!/bin/sh
cd /home/servers/srv1 && ./1.sh
sleep 10
cd /home/servers/srv2 && ./1.sh
sleep 10
и так 10 раз
Считаю это не рациональным.
Скажите, можно как то объединить файлы 1.sh и 2.sh в 1 файл ?
И чтобы в start_servers.sh сделать цикл запуска, например, указываю переменную, что SERVERS=10
и скрипт выполняет код 10 раз с учетом нумерации серверов 1 цикл = 1 сервер
C-подобный:
cd /home/servers/srv"N-Цикл" && ./1.sh
sleep 10
Ну или посоветуйте что нибудь по оптимизации запуска. Серверов много, параметры запуска у каждых разные, уже подзамучался немного таким способом запускать.

И как правильно останавливать и перезапускать ?
 

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
тут смотри, в апдейте надо сделать так: чтобы при запуске апдейте он выключал сервы, и кое-чего еще:
PHP:
#!/bin/bash
game_port=27016
screen_name=dm
game_directory=

case "$1" in
    start)
        screen -S $screen_name -X -p0 stuff 'exit'`echo -ne '\015'`
        sleep 5
        kill -9 $(ps ax | grep "port $game_port" | grep -v grep | awk '{print $1}')
        kill -9 $(ps ax | grep $screen_name | grep -v grep | awk '{print $1}')
        screen -AmdS $screen_name ~/screen-css-1-srv.sh
    ;;
    restart)
        screen -S $screen_name -X -p0 stuff 'exit'`echo -ne '\015'`
        sleep 5
        kill -9 $(ps ax | grep "port $game_port" | grep -v grep | awk '{print $1}')
    ;;
    stop)
        screen -S css-1-srv -X -p0 stuff 'exit'`echo -ne '\015'`
        sleep 5
        kill -9 $(ps ax | grep "port $game_port" | grep -v grep | awk '{print $1}')
        kill -9 $(ps ax | grep $screen_name | grep -v grep | awk '{print $1}')
        screen -wipe > /dev/null 2>&1
    ;;
    update)
        i=0
        while [$i -lt 5]
        do
        screen -S $screen_name -X -p0 stuff 'say Update server after a few seconds'`echo -ne '\015'`
        sleep 1
        done
        screen -S $screen_name -X -p0 stuff 'exit'`echo -ne '\015'`
        sleep 5
        kill -9 $(ps ax | grep "port $game_port" | grep -v grep | awk '{print $1}')
        kill -9 $(ps ax | grep $screen_name | grep -v grep | awk '{print $1}')
        kill -9 $(ps ax | grep ${screen_name}_update | grep -v grep | awk '{print $1}')
        screen -wipe > /dev/null 2>&1
        screen -AmdS ${screen_name}_update $hldsupdatetool -command update -game "Counter-Strike Source" -dir "$game_directory" -retry -verify_all
    ;;
    *)
        echo "Usage: start|stop|restart|update"
esac

Это так сказать защита от 100500 нажатий например на старт, или обновление

» вот тут бы неплохо поправочку маленькую, так сказать для удобства:
PHP:
#!/bin/sh
game_port=27015
gtv_port=27115
gclientport=27215
game_map=de_dust2

while true
do
cd /home/ck/server/srcds_DM
find ./ -type f -mtime  +7 -maxdepth 0 -name "_restart.log" -exec rm {} \;  -print
./srcds_run -game cstrike -console -port $game_port -tv_port $gtv_port -clientport $gclientport +maxplayers 54 -tickrate 66 +map $game_map +sv_lan 0
kill -9 $(ps ax | grep "port $game_port" | grep -v grep | awk '{print $1}')

echo "[---------" >> ./`date +%F`_restart.log
echo "$(date +'%F-%R:%S') Перезапуск сервера!" >> ./log/`date +%F`_restart.log
echo "Ожидайте 10 секунд"
sleep 10

done
Он состоит из двух файлов, если есть вопросы задавай, если смогу ответить отвечу.
 

andrey19992

Участник
Сообщения
487
Реакции
101
Привет всем, поделителсь, кому не жалко пожалуйста скриптами запуска серверов.
Или кто знает, помогите составить более менее оптимальный скрипт для нескольких серверов.
Суть в том, что серверов 10 штук, адрес у них всех одинаковый, отличаются только последней цифрой, например
/home/servers/srv1
/home/servers/srv2
и т.д.
Сейчас я запускаю так
в каждой папке сервера имеется 2 файла:
1.sh и 2.sh
в 1.sh
C-подобный:
#!/bin/bash
taskset -c 1 screen -S srv3 -m -d ./startnik.sh
2.sh:
C-подобный:
while true
do
kill -9 $( lsof -i:$PORT -t )
sleep 2
./srcds_run -game cstrike -port 27015  +tv_port 37015 +maxplayers 16  +map de_dust
echo Restarting in 5 Seconds...
sleep 5
done
И запускаются все сервера так start_servers.sh
C-подобный:
#!/bin/sh
cd /home/servers/srv1 && ./1.sh
sleep 10
cd /home/servers/srv2 && ./1.sh
sleep 10
и так 10 раз
Считаю это не рациональным.
Скажите, можно как то объединить файлы 1.sh и 2.sh в 1 файл ?
И чтобы в start_servers.sh сделать цикл запуска, например, указываю переменную, что SERVERS=10
и скрипт выполняет код 10 раз с учетом нумерации серверов 1 цикл = 1 сервер
C-подобный:
cd /home/servers/srv"N-Цикл" && ./1.sh
sleep 10
Ну или посоветуйте что нибудь по оптимизации запуска. Серверов много, параметры запуска у каждых разные, уже подзамучался немного таким способом запускать.

И как правильно останавливать и перезапускать ?
csgoserver: Counter-Strike: Global Offensive | вот, и не парь мозг, бешеный функционал!!! не создавай велосипед!!!
 

andrey19992

Участник
Сообщения
487
Реакции
101
Не пойму, как запускать несколько серверов
для каждого сервера нужен отдельный пользователь, допусти пользователь csgo 1сервер запускает пользователь csgo2 запускает 2сервер и тд, вот. обновление происходит просто-> ./csgoserver update и всё, засунул в crontab и всё, он сам выключит сам обновит сам включит сервер. ставь к crontab ./csgoserver monitoring на каждые 3 минуты и у тя будет мониторинг работоспособности серва, если серв упадет, скрипт сам его поднимет и тд. Не надо придумывать велосипед, уже всё есть :-)
 

HooLIGUN

MatchMaking CS:S / RGMIX.ru
Сообщения
1,064
Реакции
267
для каждого сервера нужен отдельный пользователь, допусти пользователь csgo 1сервер запускает пользователь csgo2 запускает 2сервер и тд, вот. обновление происходит просто-> ./csgoserver update и всё, засунул в crontab и всё, он сам выключит сам обновит сам включит сервер. ставь к crontab ./csgoserver monitoring на каждые 3 минуты и у тя будет мониторинг работоспособности серва, если серв упадет, скрипт сам его поднимет и тд. Не надо придумывать велосипед, уже всё есть :-)
оу, не, пользователей клепать это не по мне.
У меня 10 серверов, сейчас еще несколько запущу. Это еще не рациональнее, чем описал я.
У меня сервера тоже поднимаются сами, если падают.
 

andrey19992

Участник
Сообщения
487
Реакции
101
оу, не, пользователей клепать это не по мне.
У меня 10 серверов, сейчас еще несколько запущу. Это еще не рациональнее, чем описал я.
У меня сервера тоже поднимаются сами, если падают.
у меня примерно столько же, не вижу ничего трудного, один раз создать пользователей и в кроне прописать чтобы из под них серваки запускались и проверялись на падения..... 10 минут, и всё, больше туда не лезть месяцами. просто не вижу проблемы которую видишь ты, уже больше года сижу на этой системе. всё на изичку, главное кроном уметь пользоваться, я тут недавно научился :D
--- Добавлено позже ---
у тебя сурс сервера, тут хз. у мя CSGO, как на сурсе он работает сказать не могу, но скорее всего так же :-)
 
Сверху Снизу