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

TolikCorp

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

Для запуска необходим сам Python: apt-get install python

PHP:
#!/usr/bin/env python
import socket,ConfigParser,sys,thread,time,datetime,os

if len(sys.argv) == 1:
 sys.exit("Usage: python "+sys.argv[0]+" 'IP' PORT 'EXEC_CMD'")

def server_moninoring(ip,port,exec_cmd):
 print "[--------- Monitoring server "+ip+":"+port+" started\n"
 retry = 0
 while 1:
  sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  sock.connect((ip, int(port)))
  sock.send('\377\377\377\377TSource Engine Query\0')
  print "[--------- Send [OK] to "+ip+":"+port+" waiting response for 120 sec...."
  sock.settimeout(120)
  try:
   text=sock.recv(1024)
  except Exception, e:
   print "[--------- Error:%s"%e + " on server ip "+ip+":"+port
   retry = retry + 1
   print "RETRY: " + str(retry)
   if retry > 4:
     print "[--------- Retry is more than 5, send restart shell cmd to system!"
     print exec_cmd
     os.system(exec_cmd)
     retry = 0
   time.sleep(60)
   pass
  else:
   if (text.find('tf') > 1) or (text.find('cstrike') > 1) or (text.find('csgo') > 1) or (text.find('hl2mp') > 1):
    print "[--------- Response [OK] from "+ip+":"+port+" next retry to request is 120 sec."
    retry = 0
   time.sleep(120)

print "[--------- Loading server..."
ip = sys.argv[1]
port = sys.argv[2]
exec_cmd = sys.argv[3]
print "[--------- Server "+ip+":"+port+" successfully loaded"
print "\n"
thread.start_new_thread(server_moninoring, (ip,port,exec_cmd))
while 1:
 time.sleep(60)

Пример запуска:
screen -AmdS check_css_27015 python ./srcds_status_checker.py "xxx.xxx.xxx.xxx" "27015" "КОМАНДА ДЛЯ РЕСТАРТА СЕРВЕРА"

КОМАНДА ДЛЯ РЕСТАРТА СЕРВЕРА - скрипт, который перезапустит сервер.

На данный момент поддерживает: TF2; CSS; CSGO; HL2MP
 

Вложения

  • srcds_status_checker.zip
    844 байт · Просмотры: 57

★Сириус★

Участник
Сообщения
743
Реакции
197
кто-нибудь пользуется этим?
просто имеется один не стабильный сервер, вот задался вопросом, поствить что-нибудь что авоматом перезапускало зависший сервер
 

★Сириус★

Участник
Сообщения
743
Реакции
197
Последнее редактирование:

TolikCorp

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

TolikCorp

Участник
Сообщения
874
Реакции
334
screen -AmdS check_css_27015 python ./srcds_status_checker.py "xxx.xxx.xxx.xxx" "27015" "kill -9 ps ax | grep srcds_linux | grep -v grep | grep xxx.xxx.xxx.xxx | grep 27015 | awk '{print $1}'"
 
B

bigbrain911

Как правило если сервер зависает то он нагружает ядро процессора на 100%, найти бы скрипт который глобально следил за нагрузкой процессов и убивал тот, который нагружает 100% ядро допустим более 3 минут (время нужно подобрать, чтобы не убивал при запуске всех серверов после ребута).
 

TolikCorp

Участник
Сообщения
874
Реакции
334
И что, что на 100% загрузит? Он ведь по факту завис. Там 3 минуты реакция, тут 3 минуты реакция - какая разница?
 
B

bigbrain911

Разница в универсальности, зачем переделывать для каждого сервера запуск и иметь кучу проверок, если можно держать запущенным всего 1 скрипт.
 

TolikCorp

Участник
Сообщения
874
Реакции
334
Дай пример твоего скрипта, а то на словах то всё проще.

Добавлено через 18 минут
И зачем отдельно их запускать? вшиваем запуск монитора при старте серва и отключение его при выключении серва.
 
Последнее редактирование:
B

bigbrain911

1. Скрипта у меня нет, но ищу.
2. У меня 24 игровых сервера, менять скрипты запуска это куча работы + доп. нагрузка в виде мониторинга.
 

TolikCorp

Участник
Сообщения
874
Реакции
334
У меня есть так сказать единый запусктр серверов, ему только путь к конфигу указать и всё. Сам запускает серв, сам запустит монитор, сам выполнит все необходимые проверки. 24 - не так уж и много.
"менять скрипты запуска " у меня это решается добавлением двух строк в ЗАПУСКАТР
 

artyrka94

Участник
Сообщения
181
Реакции
38
КОМАНДА ДЛЯ РЕСТАРТА СЕРВЕРА - скрипт, который перезапустит сервер.
а как запустить sh скрипт который лежит в той же директории, что и скрипт мониторинга?
пробовал по разному
./start.sh
sh: 1: start.sh: not found


sh start.sh
sh: 1: start.sh: not found

(права 777 на все файлы стоят)
 

TolikCorp

Участник
Сообщения
874
Реакции
334
нужно писать абсолютный пусть, тобишь /home/ и т.д.
 

artyrka94

Участник
Сообщения
181
Реакции
38
а в чем может быть проблема, если без screen запускаю то работает а если использую screen то он вылетает в то время когда должен запустить скрипт запуска [screen is terminating]
 

artyrka94

Участник
Сообщения
181
Реакции
38
PHP:
screen -A -m -d -S check_css_cw1 ./cheker_css.py "xxx.xxx.xxx.xxx" "27015" "cd /home/shift/css/CW1/ && sh start.sh"
 

TolikCorp

Участник
Сообщения
874
Реакции
334
проверь так и заодно скинь содержимое sh /home/shift/css/CW1/sh start.sh
 

artyrka94

Участник
Сообщения
181
Реакции
38
start.sh:
PHP:
echo "CW1 start"
kill `ps -ef | awk '! /awk/ && /css_cw1/ {print $2}'`
sleep 1
screen -A -m -d -S css_cw1 ./srcds_run -game cstrike -insecure -nocrashdialog -sv_tags no-steam -port 27015 +mp_flashlight 1 -tickrate 66 +fps_max 100 -maxplayers 20 +ip xxx.xxx.xxx.xxx +sv_lan 0 +map de_dust2 +log on +exec server.cfg
 
Сверху Снизу