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

Тема в разделе "Linux", создана пользователем HooLIGUN, 11 окт 2016.

  1. HooLIGUN

    HooLIGUN

    Сообщения:
    748
    Симпатии:
    126
    Привет всем, поделителсь, кому не жалко пожалуйста скриптами запуска серверов.
    Или кто знает, помогите составить более менее оптимальный скрипт для нескольких серверов.
    Суть в том, что серверов 10 штук, адрес у них всех одинаковый, отличаются только последней цифрой, например
    /home/servers/srv1
    /home/servers/srv2
    и т.д.
    Сейчас я запускаю так
    в каждой папке сервера имеется 2 файла:
    1.sh и 2.sh
    в 1.sh
    Код:
    #!/bin/bash
    taskset -c 1 screen -S srv3 -m -d ./startnik.sh
    2.sh:
    Код:
    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
    Код:
    #!/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 сервер
    Код:
    cd /home/servers/srv"N-Цикл" && ./1.sh
    sleep 10
    Ну или посоветуйте что нибудь по оптимизации запуска. Серверов много, параметры запуска у каждых разные, уже подзамучался немного таким способом запускать.

    И как правильно останавливать и перезапускать ?
     
  2. Серый™

    Серый™ CS:S Server

    Сообщения:
    2.565
    Симпатии:
    1.150
    тут смотри, в апдейте надо сделать так: чтобы при запуске апдейте он выключал сервы, и кое-чего еще:
    PHP:
    #!/bin/bash
    game_port=27016
    screen_name
    =dm
    game_directory
    =

    case 
    "$1" in
        start
    )
            
    screen -S $screen_name --p0 stuff 'exit'`echo -ne '\015'`
            
    sleep 5
            kill 
    -$(ps ax grep "port $game_portgrep -v grep awk '{print $1}')
            
    kill -$(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 --p0 stuff 'exit'`echo -ne '\015'`
            
    sleep 5
            kill 
    -$(ps ax grep "port $game_portgrep -v grep awk '{print $1}')
        ;;
        
    stop)
            
    screen -S css-1-srv --p0 stuff 'exit'`echo -ne '\015'`
            
    sleep 5
            kill 
    -$(ps ax grep "port $game_portgrep -v grep awk '{print $1}')
            
    kill -$(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 --p0 stuff 'say Update server after a few seconds'`echo -ne '\015'`
            
    sleep 1
            done
            screen 
    -S $screen_name --p0 stuff 'exit'`echo -ne '\015'`
            
    sleep 5
            kill 
    -$(ps ax grep "port $game_portgrep -v grep awk '{print $1}')
            
    kill -$(ps ax grep $screen_name grep -v grep awk '{print $1}')
            
    kill -$(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  +-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 
    -$(ps ax grep "port $game_portgrep -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 
    Он состоит из двух файлов, если есть вопросы задавай, если смогу ответить отвечу.
     
  3. andrey19992

    andrey19992

    Сообщения:
    301
    Симпатии:
    26
    csgoserver: Counter-Strike: Global Offensive | вот, и не парь мозг, бешеный функционал!!! не создавай велосипед!!!
     
  4. HooLIGUN

    HooLIGUN

    Сообщения:
    748
    Симпатии:
    126
    Не пойму, как запускать несколько серверов
     
  5. andrey19992

    andrey19992

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

    HooLIGUN

    Сообщения:
    748
    Симпатии:
    126
    оу, не, пользователей клепать это не по мне.
    У меня 10 серверов, сейчас еще несколько запущу. Это еще не рациональнее, чем описал я.
    У меня сервера тоже поднимаются сами, если падают.
     
  7. andrey19992

    andrey19992

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