[СКРИПТ] Проверка сервера на отклик. PYTHON

TolikCorp

Участник
Сообщения
874
Реакции
334
Попробуй:
screen -A -m -d -S check_css_cw1 ./cheker_css.py "xxx.xxx.xxx.xxx" "27015" "kill $(ps -ef | awk '! /awk/ && /css_cw1/ {print $2}')"
 

TolikCorp

Участник
Сообщения
874
Реакции
334
Сделай запуск серва в цикле. на форуме такое было.
 
B

bigbrain911

Пробовал запустить пишет ошибку:

[--------- Loading server...
Traceback (most recent call last):
File "./srcds_status_checker.py", line 38, in <module>
exec_cmd = sys.argv[3]
IndexError: list index out of range

Запускал просто без скрина, чтобы проверить как работает - python ./srcds_status_checker.py "xxx.xxx.xxx.xxx" "27018"
 

TolikCorp

Участник
Сообщения
874
Реакции
334
Должен быть третий аргумент, который будет выполняться, если серв зависнет:
python ./srcds_status_checker.py "xxx.xxx.xxx.xxx" "27018" "kill -9 ps ax | grep srcds_linux | grep -v grep | grep xxx.xxx.xxx.xxx | grep 27018 | awk '{print $1}'"
 
B

bigbrain911

TolikCorp, подскажите как правильно организовать (переделать запуск), есть много серверов, запуск по такой схеме:

есть 1 файл который запускает 2-й в скрине

1-й:
start_cw1

C-подобный:
#!/bin/sh
echo "Starting CS:Source cw"
sleep 1
screen -A -m -d -S cw1 /путь/servers/cw1/css/cw1.sh

2-й:
cw1.sh

C-подобный:
#!/bin/sh
while true ; do
/путь/servers/cw1/css/srcds_run -console +ip 0.0.0.0 -game cstrike +maxplayers 11 -port 27215 -tickrate 66 +fps_max 600 +map de_dust2 +tv_port 27245
done

И еще вопрос, как правильнее будет выглядеть команда завершения процесса:
1 вариант:
C-подобный:
$(ps aux | grep 27215 | grep srcds_run | awk '{print "kill -9 " $2}')
2 вариант:
C-подобный:
ps aux | grep 27215 | grep srcds_run | awk '{print $2}' | xargs kill -9
 
Последнее редактирование модератором:

TolikCorp

Участник
Сообщения
874
Реакции
334
Кстати говоря, тем методом, что мой попробуйте завершить серв - он сам восстановится. ничего не надо переделывать.
python ./srcds_status_checker.py "xxx.xxx.xxx.xxx" "27018" "kill -9 `ps ax | grep srcds_linux | grep -v grep | grep yyy.yyy.yyy.yyy | grep 27018 | awk '{print $1}'`"

и вместо xxx.xxx.xxx.xxx - использовать ИП по факту, т.е. на который игроки конектятся. а yyy.yyy.yyy.yyy - ип, который указали в строке запуска. порт соответственно сменить. переделывать ничего не надо. просто правильно запустить эту утилиту
 
Последнее редактирование:
B

bigbrain911

Вотбщем такая картина
C-подобный:
RETRY: 4
[--------- Send [OK] to xxx.xxx.xxx.xxx:27017 waiting response for 120 sec....
[--------- Error:timed out on server ip xxx.xxx.xxx.xxx:27017
RETRY: 5
[--------- Retry is more than 5, send restart shell cmd to system!
ps aux | grep 27017 | grep srcds_run | awk '{print }' | xargs kill -9
kill: неверный ключ -- «g»

Usage:
 kill [options] <pid> [...]

Options:
 <pid> [...]            send signal to every <pid> listed
 -<signal>, -s, --signal <signal>
                        specify the <signal> to be sent
 -l, --list=[<signal>]  list all signal names, or convert one to a name
 -L, --table            list all signal names in a nice table

 -h, --help     display this help and exit
 -V, --version  output version information and exit

For more details see kill(1).
Если просто в консоли прописать
C-подобный:
ps aux | grep 27017 | grep srcds_run | awk '{print $2}' | xargs kill -9
то процесс завершается (убивается)

Странно то что строка завершения выглядит так:
C-подобный:
ps aux | grep 27017 | grep srcds_run | [B][COLOR="Red"]awk '{print $2}' [/COLOR][/B]| xargs kill -9
а скрипт уже прописывает так, поэтому вроде бы и ошибка
C-подобный:
ps aux | grep 27017 | grep srcds_run | [B][COLOR="Red"]awk '{print }'[/COLOR][/B] | xargs kill -9

Как исправить кто подскажет, ос дебиан.

Добавлено через 57 минут
Разобрался немного, точнее прописал другую строку завершения

C-подобный:
"kill -9 `ps aux | grep 27017 | grep srcds_linux | grep -v grep | awk '{print($2)}'`"

Только вот почему то выбираются не все процессы srcds_linux с порта 27017 или точнее сказать не все разу убиваются.
 
Последнее редактирование модератором:

TolikCorp

Участник
Сообщения
874
Реакции
334
Не пойму я некоторых людей, все за них сделал, дал готовые команды, даже сказал, что в исходном ничего не надо менять, просто правильно запустить. Даже на этом месте они... Ну да ладно.
А не все добивает потому, что завершится часть процессов. Серв поймет, что че-то не так - вызовет внутренний перезапуск. А если ты все сразу - то серв выключается, и тебе надо че-то мутить для того, чтобы цикл организовать по запуску и т.д. и т.п.
python ./srcds_status_checker.py "xxx.xxx.xxx.xxx" "27018" "kill -9 `ps ax | grep srcds_linux | grep -v grep | grep yyy.yyy.yyy.yyy | grep 27018 | awk '{print $1}'`"


xxx.xxx.xxx.xxx - использовать ИП по факту, т.е. на который игроки конектятся. а yyy.yyy.yyy.yyy - ип, который указали в строке запуска.
 
B

bigbrain911

Да все верно я сделал, все ip вписаны верно, я проводил эксперимент на зависшем сервере, поэтому он и не отвечал, ваша строка завершения не работает, я нашел другой вариант, так все работает и завершает что нужно.

Добавлено через 22 часа 10 минут
TolikCorp, Спасибо, прописал все как вы дали, работает.
 
Последнее редактирование модератором:
B

bigbrain911

Блин уже устал, опять странности, вот работающий скрипт (игровой сервер завис):

C-подобный:
[--------- Send [OK] to 192.168.40.189:27017 waiting response for 120 sec....
[--------- Error:timed out on server ip 192.168.40.189:27017
RETRY: 1
[--------- Send [OK] to 192.168.40.189:27017 waiting response for 120 sec....
[--------- Error:timed out on server ip 192.168.40.189:27017
RETRY: 2
[--------- Send [OK] to 192.168.40.189:27017 waiting response for 120 sec....
[--------- Error:timed out on server ip 192.168.40.189:27017
RETRY: 3
[--------- Send [OK] to 192.168.40.189:27017 waiting response for 120 sec....
[--------- Error:timed out on server ip 192.168.40.189:27017
RETRY: 4
[--------- Send [OK] to 192.168.40.189:27017 waiting response for 120 sec....
[--------- Error:timed out on server ip 192.168.40.189:27017
RETRY: 5
[--------- Retry is more than 5, send restart shell cmd to system!
[B][COLOR="red"]kill -9 3752
sh: 1: kill: No such process[/COLOR][/B]

[--------- Send [OK] to 192.168.40.189:27017 waiting response for 120 sec....
[--------- Error:timed out on server ip 192.168.40.189:27017
RETRY: 1
[--------- Send [OK] to 192.168.40.189:27017 waiting response for 120 sec....
[--------- Error:timed out on server ip 192.168.40.189:27017
RETRY: 2
[--------- Send [OK] to 192.168.40.189:27017 waiting response for 120 sec....
[--------- Error:timed out on server ip 192.168.40.189:27017
RETRY: 3
[--------- Send [OK] to 192.168.40.189:27017 waiting response for 120 sec....
[--------- Error:timed out on server ip 192.168.40.189:27017
RETRY: 4
[--------- Send [OK] to 192.168.40.189:27017 waiting response for 120 sec....
[--------- Error:timed out on server ip 192.168.40.189:27017
RETRY: 5
[--------- Retry is more than 5, send restart shell cmd to system!
[B][COLOR="Red"]kill -9 3752
sh: 1: kill: No such process[/COLOR][/B]


Пишу ту же строку только без kill -9, вот что выдает (правильный процесс):
C-подобный:
ps ax | grep srcds_linux | grep -v grep | grep 0.0.0.0 | grep 27017 | awk '{print $1}'
[COLOR="red"]9666[/COLOR]

Вот содержимое:

C-подобный:
#!/bin/sh
echo "Starting Monitoring gg"
sleep 1
screen -A -m -d -S mon_gg1 python /путь/srcds_status_checker.py "192.168.40.189" "27017" "kill -9 `ps ax | grep srcds_linux | grep -v grep | grep 0.0.0.0 | grep 27017 | awk '{print $1}'`"

Самое интересное, что ввел руками в консоль kill -9 `ps ax | grep srcds_linux | grep -v grep | grep 0.0.0.0 | grep 27017 | awk '{print $1}'` он нашел и убил нужный процесс 9666
 

TolikCorp

Участник
Сообщения
874
Реакции
334
Смотри, скрипт рабочий, как завершать серв - уже забота твоя.
 

TolikCorp

Участник
Сообщения
874
Реакции
334
Как вариант, можешь сделать sh скрипт, в котором закроется скрин серва и включится заного.

/путь/srcds_status_checker.py "192.168.40.189" "27017" "sh /home/script_27017.sh"

В файле script_27017.sh делаешь нужные комбинации.

Добавлено через 48 секунд
т.е. сделай скрипт, запусти серв, запусти sh /home/script_27017.sh, если все ок, можешь включать мониторинг.
 
Последнее редактирование:
B

bigbrain911

PHP:
echo "cw1 start"
kill $(ps -ef | awk '! /awk/ && /папка с сервером/ {print $2}')
sleep 1
screen -A -m -d -S cw1 /путь/cw1.sh

Если таким образом то убивается не только скрин в котором запущен сервер, но и скрипт питона который мониторит этот сервер.
 
Последнее редактирование модератором:

TolikCorp

Участник
Сообщения
874
Реакции
334
делай название скрина допустим так, server_cw_1_screen - в нем сервер работает, а server_cw_1_monitoring - файл питона.

pids_1="$(ps ax | grep SCREEN | grep -v grep | grep server_cw_1_screen | awk '{print $1}')"
if [ -n "$pids_1" ]; then
kill -9 ${pids_1}
fi
 
B

bigbrain911

Я скоро вздернуть с этими скриптами. Я писал выше как у меня организован запуск. 1-й скритп запускает 2-й в скрине.
Мониторинг запускается отдельно в скрине

1-й:
start_cw1

C-подобный:
#!/bin/sh
echo "Starting CS:Source cw"
sleep 1
screen -A -m -d -S cw1 /путь/servers/cw1/css/cw1.sh

2-й:
cw1.sh

C-подобный:
#!/bin/sh
while true ; do
/путь/servers/cw1/css/srcds_run -console +ip 0.0.0.0 -game cstrike +maxplayers 11 -port 27215 -tickrate 66 +fps_max 600 +map de_dust2 +tv_port 27245
done

Мониторинг:

C-подобный:
#!/bin/sh
echo "Starting Monitoring cw1"
sleep 1
screen -A -m -d -S mon_cw1 python /путь/monitoring/srcds_status_checker.py "192.168.40.192" "27215" "kill -9 `ps ax | grep srcds_linux | grep -v grep | grep 0.0.0.0 | grep 27315 | awk '{print $1}'`"
 
B

bigbrain911

Да ни хотелось ни вас напрягать, да и самому не особо удобно.
 

TolikCorp

Участник
Сообщения
874
Реакции
334
Потому что на форуме уже одну проблему дня 3 решаем,а там минут 30 работы и готово.
 
Сверху Снизу