[Linux] Start.sh Stop.sh

Тема в разделе "Counter-Strike: Source", создана пользователем Пыхарь, 22 янв 2013.

  1. Пыхарь

    Пыхарь

    Сообщения:
    150
    Симпатии:
    19
    Помогите создать бинарники Start.sh и Stop.Sh
    Спасибо. А то Не могу найти. Или может вы что то лучше предложите чем я нашел. (вроде нашел start)
     
  2. Пыхарь

    Пыхарь

    Сообщения:
    150
    Симпатии:
    19
    Да но нужного не нашел. Мне нужно что файл stop останавливал определенный сервер в папке где он лежит.
     
  3. SenatoR

    SenatoR Модератор

    Сообщения:
    714
    Симпатии:
    270
    Не проще ли просто командой kill его положить?
     
  4. BMW M6

    BMW M6

    Сообщения:
    1.221
    Симпатии:
    569
    Самый нормальный вариант это screen. Задал имя скрина вот и всё. Потом положил его.
    Для установки скрина от рута
    PHP:
    apt-get install screen
    Вот тебе start.sh

    PHP:
    #!/bin/sh
    sleep 1
    screen 
    ----S имя_скрина ./srcds_run -console -game cstrike -port 27012 +maxplayers 30 +map ba_jail_electric_vip_v2 +sv_lan 0
    Команда screen -ls выводит все скрины, чтобы убить пишешь kill номер процесса.
    Или же screen -r имя скрина тебе запустит в консоль сервера и там нажмешь "ctrl+c" и он его тоже завершит!!!
     
    Владислав Филин 234102502 нравится это.
  5. Пыхарь

    Пыхарь

    Сообщения:
    150
    Симпатии:
    19
    Stop.sh:

    #!/bin/sh
    kill `ps xww | grep "srcds" | cut -c1-5` 2>/dev/null
    ps xww | grep "srcds" | cut -c1-5 | xargs kill 2>/dev/null

    со скрином способ не пашет.
     
  6. BMW M6

    BMW M6

    Сообщения:
    1.221
    Симпатии:
    569
    Странно у меня работает. Мб с руками что то? http://xgu.ru/wiki/man:screen
     
  7. KorDen

    KorDen Atra esterní ono thelduin! Ньюсмейкер

    Сообщения:
    2.194
    Симпатии:
    1.398
    Вот что у меня, заодно с возможностью управления через вебсайт завязано, собирал все по кусочкам и с экспериментами...
    Код:
    [[email protected] ~]$ more css-1.sh
    #!/bin/bash
    case "$1" in
            start)
                            /usr/local/bin/screen -AmdS css-1-srv ~/screen-css-1-srv.sh
            ;;
            restart)
                            /usr/local/bin/screen -S css-1 -X -p0 stuff 'exit'`echo -ne '\015'`
                            sleep 1;
                            kill -9 $(ps ax | grep "port 27034" | grep -v grep | awk '{print $1}')
            ;;
            stop)
                            /usr/local/bin/screen -S css-1-srv -X -p0 stuff 'exit'`echo -ne '\015'`
                            sleep 2;
                            kill -9 $(ps ax | grep "port 27034" | grep -v grep | awk '{print $1}')
                            kill -9 $(ps ax | grep screen-css-1-srv | grep -v grep | awk '{print $1}')
                    /usr/local/bin/screen -wipe
            ;;
            upd)
                    /usr/local/bin/screen -AmdS upd-css-1 ~/steam -command update -game "Counter-Strike Source" -dir "~/css-1" -retry -verify_all
            ;;
            *)
            echo "Usage: start|stop|restart|upd"
    esac
    
    Код:
    [[email protected] ~]$ more screen-css-1-srv.sh
    #!/bin/sh
    while true
    do
    cd ~/css-1/css
    ./srcds_run -game cstrike -port 27034 +КУЧА_ПАРАМЕТРОВ
    kill -9 $(ps ax | grep "port 27034" | grep -v grep | awk '{print $1}')
    echo "Restarting CSS #1" >> ~/restarts.log
    date >> ~/restarts.log
    echo !!! Waiting 10 seconds to restart...
    sleep 10
    done
    
    Собирал идеи постепенно отовсюду, скрипт параметров, когда начинал делать, вообще из файла запуска тимспика выдрал ))) Рестарты (убийства) и подача команд в скрин это уже творчество tiger_by и кого-то еще.... скрипт цикла с записью лога рестарта это уже полностью мое творчества кроме строчки убийства...
     
    Roman =) и The Night Fury нравится это.
  8. infernozet

    infernozet

    Сообщения:
    96
    Симпатии:
    18
    зачем флаг -r ? он и без флагов хорошо внутрь пускает, и создает если нет такого скриина
     
  9. KorDen

    KorDen Atra esterní ono thelduin! Ньюсмейкер

    Сообщения:
    2.194
    Симпатии:
    1.398
    :facepalm: -r от слова Resume, если скрыто, тебе надо вызвать "наверх" один из детаченных серверов, или есть другие варианты открытия?
     
  10. TolikCorp

    TolikCorp

    Сообщения:
    855
    Симпатии:
    271
    Тут смотри, в апдейте надо сделать так: чтобы при запуске апдейте он выключал сервы, и кое-чего еще:

    PHP:
    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 нажатий например на старт, или обновление

    Добавлено через 16 минут
    И вот тут бы неплохо поправочку маленькую, так сказать для удобства:
    PHP:
    #!/bin/sh
    while true
    do
    cd ~/css-1/css
    find 
    ./ -type f -mtime  +-maxdepth 0 -name "_restart.log" -exec rm {} \;  -print 

    ./
    srcds_run -game cstrike -port 27034 +КУЧА_ПАРАМЕТРОВ
    kill 
    -$(ps ax grep "port 27034" grep -v grep awk '{print $1}')

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

    done
    Добавлено через 17 минут
    О как!
     
    Последнее редактирование: 31 янв 2013
    Roman =) нравится это.
  11. TolikCorp

    TolikCorp

    Сообщения:
    855
    Симпатии:
    271
    Почему сомнительно? тем более есть проверка на устарелость. т.е. Удаляются те, что старше 7 дней, и ищется только в этой папке, никуда в в сторону.

    Добавлено через 6 минут
    + в названии файла он не пишет же время, только год-месяц-число
     
    Последнее редактирование: 31 янв 2013
  12. TolikCorp

    TolikCorp

    Сообщения:
    855
    Симпатии:
    271
    Как вариант сделать подсчет строк данном файле, если больше двух () то писать в глобальный рестарт_лог
    PHP:
    if [$(wc -./`date +%F`_restart.log) -lt 2]
    then
    echo "Лишних перезапусков нет"
    else
    echo
    "Обратите внимание на файл ~/css-1/css/`date +%F`_restart.log" >> /home/global_restarts.log
    fi
     
  13. hottab

    hottab

    Сообщения:
    37
    Симпатии:
    2
    Как сделал через веб, если не секрет?
     
  14. KorDen

    KorDen Atra esterní ono thelduin! Ньюсмейкер

    Сообщения:
    2.194
    Симпатии:
    1.398
  15. TolikCorp

    TolikCorp

    Сообщения:
    855
    Симпатии:
    271
    Доделал "исполняемый под скрином файл"
    Командный подхватывает настройки из этого файла при помощи grep & sed и подходит для всех игр на движке Сурс

    PHP:
    #!/bin/sh/
        
    info_line_half="[---------"

        
    ip_address="ИП АДРЕС ЗАПУСКА"
        
    server_dir="/home/user/css_1"
        
    screen_name="css"
    # Название игры для обновления
        
    game_prefix_1="Counter-Strike Source"
    # Название игры для запуска
        
    game_prefix_2="cstrike"
    # Путь до файла запуска srcds_run от каталога сервера
        
    game_prefix_3="css/"
        
    tickrate="66"
        
    game_port="27015"
        
    default_map="de_dust2"
        
    maxplayers="64"
        
    params_ext="+tv_enable 0 -nobots -nocrashdialog"

        
    while true
        
    do
            
    cd $server_dir
            
    ./${game_prefix_3}srcds_run -console -game $game_prefix_2 -tickrate $tickrate -secure +ip $ip_address +map $default_map -port $game_port +maxplayers $maxplayers $params_ext
            kill 
    -$(ps ax grep "port $game_portgrep -v grep awk '{print $1}')
            echo 
    "$info_line_half $(date +'%F-%R:%S') | Перезапуск сервера!" >> ./restarts.log
            
    echo "Ожидайте 10 секунд"
            
    sleep 10
        done 
    Командный выложу позже
     
    Последнее редактирование: 14 фев 2013