Вопросы относительно .sh скриптов

Тема в разделе "Linux", создана пользователем TolikCorp, 21 фев 2013.

  1. TolikCorp

    TolikCorp

    Сообщения:
    855
    Симпатии:
    272
    Привет, я в одной из соседних тем дорабатывал универсальный ЗАПУСКАТР, сделал подхват настроек из скрипта с данными сервера. Но вопрос в этом:

    PHP:
                st_count=0
                
    while [ $st_count -lt 5 ]
                do
    # command
                
    echo Completed $st_count
                st_count
    ="$(( $st_count + 1 ))"
                
    sleep 1
                done
                screen 
    -S $screen_name --p0 stuff 'exit'`echo -ne '\015'`
                echo 
    Completed exit
                
    sleep 5
                kill 
    -$(ps ax grep "port $game_portgrep -v grep awk '{print $1}')
                echo 
    Completed k0
                kill 
    -$(ps ax grep $screen_name grep -v grep awk '{print $1}')
                echo 
    Completed k1
                kill 
    -$(ps ax grep ${screen_name}_update grep -v grep awk '{print $1}')
                echo 
    Completed k2
                screen 
    -wipe > /dev/null 2>&1
                
    echo Completed wipe        
    переменные game_port и т.д. нормальные
    Вывод такой:

    PHP:
    No screen session found.
    Completed 4
    No screen session found
    .
    Completed
    kill
    112Usagekill [-s sigspec | -signum | -sigspec] [pid job]... or
    kill -[exitstatus]
    Completed k0
    Т.е. скрипт останавливается после завершения процесса
    Как это исправить?

    Добавлено через 35 минут
    Запускаю стандартным методом: sh /blablabla/file.sh
     
    Последнее редактирование: 21 фев 2013
  2. tiger_by

    tiger_by Гл. Админ SourceGames.RU

    Сообщения:
    629
    Симпатии:
    279
    Вообще, что скрипт должен делать?
    Пока вижу только разнообразные способы убийства процессов серва...

    Код:
    [COLOR=#000000][COLOR=#0000BB]
    [COLOR=Red]#! /bin/sh
    # Где обозначена переменная screen_name ?
    # screnname=css
    [/COLOR]            st_count[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000BB]0 
                [/COLOR][COLOR=#007700]while [ [/COLOR][COLOR=#0000BB]$st_count [/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]lt 5 [/COLOR][COLOR=#007700]] 
                do 
    [/COLOR][COLOR=#FF8000]# command 
                [/COLOR][COLOR=#007700]echo [COLOR=Red]"[/COLOR][/COLOR][COLOR=#0000BB]Completed $st_count[COLOR=Red]"[/COLOR] 
                st_count[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#DD0000]"$(( [/COLOR][COLOR=#0000BB]$st_count[/COLOR][COLOR=#DD0000] + 1 ))" 
                [/COLOR][COLOR=#0000BB]sleep 1 
                done 
                screen [/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]S $screen_name [/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]X [/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]p0 stuff [/COLOR][COLOR=#DD0000]'exit'[/COLOR][COLOR=#007700]`[/COLOR][COLOR=#DD0000]echo -ne '\015'[/COLOR][COLOR=#007700]` 
                echo [/COLOR][COLOR=#0000BB]Completed [/COLOR][COLOR=#007700]exit 
                [/COLOR][COLOR=#0000BB]sleep 5 
    [COLOR=DarkOrchid]
    # В этих строках уж нет необходимости
    
                #kill [/COLOR][/COLOR][COLOR=DarkOrchid]-9 $(ps ax | grep "port $game_port" | grep -v grep | awk '{print $1}') 
                #echo Completed k0 
                #kill -9 $(ps ax | grep $screen_name | grep -v grep | awk '{print $1}') 
                #echo Completed k1 
                #kill -9 $(ps ax | grep ${screen_name}_update | grep -v grep | awk '{print $1}') 
                #echo Completed k2 
                #screen -wipe > /dev/null 2>&1 
                #echo Completed wipe  [/COLOR][/COLOR][COLOR=DarkOrchid]
    [/COLOR]
     
  3. TolikCorp

    TolikCorp

    Сообщения:
    855
    Симпатии:
    272
    Это связано с тем, что это лишь кусок.

    PHP:
    #!/bin/sh/
    hldsupdatetool="/home/hldsupdatetool/steam"
    server_dir="/home/user/css_1"
    screen_name="css_1"
    game_prefix_1="Counter-Strike Source"
    game_prefix_2="cstrike"
    game_port="29876"

    отправка на серв сообщений об обновлении
    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
    лог обновлений
    лог предыдущобновления
    cp 
    ./screenlog.0 screenlog.1 > /dev/null 2>&1
    rm 
    ./screenlog.0 > /dev/null 2>&1
    запуск обновления
    screen 
    -AmdLS ${screen_name}_update $hldsupdatetool -command update -game '"$game_prefix_1"' -dir "$server_dir-retry -verify_all
     
  4. tiger_by

    tiger_by Гл. Админ SourceGames.RU

    Сообщения:
    629
    Симпатии:
    279
    Вопрос со скрином решен?
     
  5. TolikCorp

    TolikCorp

    Сообщения:
    855
    Симпатии:
    272
    еще нет, выходит из скрипта после одного из тасккила

    Добавлено через 20 минут
    и вот возник по ходу вопрос:
    screen_name="css_1"
    kill -9 $(ps ax | grep $screen_name | grep -v grep | awk '{print $1}')

    допустим есть серверы css_1 и css_11
    и при выполнении команды офаются оба
    вариант только давать номера с 00001 ... 00011 или можно как-то огродить?

    Добавлено через 1 час 2 минуты
    Сам отвечу на свой вопрос:
    kill -9 $(ps ax | grep SCREEN | grep -v grep | grep $ip | grep $port | awk '{print $1}')
    тобишь
    kill -9 $(ps ax | grep SCREEN | grep -v grep | grep 192.168.1.15 | grep 27015| awk '{print $1}')
    Должно работать
     
    Последнее редактирование: 22 фев 2013
  6. TolikCorp

    TolikCorp

    Сообщения:
    855
    Симпатии:
    272
    PHP:
    screen_name="css_1"
    if [ screen -list | grep ${screen_name}_update ]; then
            server_status
    ="2"
            
    info_status="Сервер обновляется"
                
    elif screen -list | grep ${screen_name} ]; then
                    server_status
    ="1"
                    
    info_status="Сервер запущен"
                        
    elif screen -list | grep ${screen_name}_install ]; then
                            server_status
    ="3"
                            
    info_status="Сервер устанавливается"
                                
    elif true ]; then
                                    server_status
    ="-1"
                                    
    info_status="Статус не удалось получить, т.к. сервер выключен"
        
    fi
        
    61 - строка с последним fi
    [: 61: missing ]
    grep: ]: Нет такого файла или каталога
    [: 61: missing ]
    grep: ]: Нет такого файла или каталога
    [: 61: missing ]
    grep: ]: Нет такого файла или каталога

    Эхо на показ статуса
    [--------- Код статуса: -1 - Статус не удалось получить, т.к. сервер выключен

    Как нужно исправить?
     
  7. tiger_by

    tiger_by Гл. Админ SourceGames.RU

    Сообщения:
    629
    Симпатии:
    279
    Покажи полный код, а то непонятно что куда.
     
  8. TolikCorp

    TolikCorp

    Сообщения:
    855
    Симпатии:
    272
    [email protected]:~$ sh ./status.sh
    There are screens on:
    1509.css_1 (03.03.2013 06:00:34) (Detached)
    9 Sockets in /var/run/screen/S-user.

    [: 26: missing ]
    grep: ]: Нет такого файла или каталога
    [: 26: missing ]
    grep: ]: Нет такого файла или каталога
    [: 26: missing ]
    grep: ]: Нет такого файла или каталога
    Код статуса: -1 - Статус не удалось получить, т.к. сервер выключен
    [email protected]:~$
    PHP:
    #!/bin/sh/

    #screen_name="$(grep screen_name= $server_conf | sed -e 's/.*"\(.*\)".*/\1/')"
        
    screen_name="css_1"
        
    screen -wipe > /dev/null 2>&1
        screen 
    -list
    # А что сервер делает?
    ####################################################
    # -1 - Статус не удалось получить, т.к. сервер выключен
    # 1 - Сервер запущен
    # 2 - Сервер обновляется
    # 3 - Сервер устанавливается

        
    if [ screen -list | grep ${screen_name}_update ]; then
            server_status
    ="2"
            
    info_status="Сервер обновляется"
                
    elif screen -list | grep ${screen_name} ]; then
                    server_status
    ="1"
                    
    info_status="Сервер запущен"
                        
    elif screen -list | grep ${screen_name}_install ]; then
                            server_status
    ="3"
                            
    info_status="Сервер устанавливается"
                                
    elif true ]; then
                                    server_status
    ="-1"
                                    
    info_status="Статус не удалось получить, т.к. сервер выключен"
        
    fi
        
    echo "$info_line_half Код статуса: $server_status - $info_status"
    Добавлено через 17 минут
    Ох, опять сам себе отвечаю)))
    PHP:
    #!/bin/sh/

    #screen_name="$(grep screen_name= $server_conf | sed -e 's/.*"\(.*\)".*/\1/')"
        
    screen_name="css_1"
        
    screen -wipe > /dev/null 2>&1
        screen 
    -list
    # А что сервер делает?
    ####################################################
    # -1 - Статус не удалось получить, т.к. сервер выключен
    # 1 - Сервер запущен
    # 2 - Сервер обновляется
    # 3 - Сервер устанавливается

        
    if  screen -list | grep -${screen_name}_update then
            server_status
    ="2"
            
    info_status="Сервер обновляется"
                
    elif  screen -list | grep -${screen_name} ; then
                    server_status
    ="1"
                    
    info_status="Сервер запущен"
                        
    elif screen -list | grep -${screen_name}_installthen
                            server_status
    ="3"
                            
    info_status="Сервер устанавливается"
                                
    elif true ]; then
                                    server_status
    ="-1"
                                    
    info_status="Статус не удалось получить, т.к. сервер выключен"
        
    fi
        
    echo "$info_line_half Код статуса: $server_status - $info_status"
    вот так рабит как надо)
     
    Последнее редактирование: 3 мар 2013
  9. acik

    acik

    Сообщения:
    734
    Симпатии:
    628
    Я понял что это скрипт на проверку но разве он что то делает как узнать где пути к серверу вводить и тд
     
  10. tiger_by

    tiger_by Гл. Админ SourceGames.RU

    Сообщения:
    629
    Симпатии:
    279
    Ну как видно тут оно смотрит на скриннейм.