Скрипт контроля за зависанием сервера

Accelerator

Участник
Сообщения
71
Реакции
17
Интересует какой нибудь shell скрипт для контроля за зависанием процесса сервера srcds_linux, который бы раз в n минут запускался и проверял сервер(-а) на зависание и если процесс завис, то автоматически убивал бы его и заново запускал. В общем альтернатива стандартному серверному watchdog, который перезапускает сервера с сообщением Alarm clock. Проблема в том, что он работает некорректно. На слотовом тарифе myaren'ы у меня он отключен и сервер в случае зависания перезапускает какой-то внутренний скрипт самой арены. Вот он работает корректно. А сам watchdog srcds может перезапустить сервера даже тогда, когда сервер нормально работает и никаких проблем нет, причем он может сделать за 5 минут сразу 5-10 перезапусков с сообщением о зависании, хотя на деле ничего не зависло.

В общем то интересна какая нибудь альтернатива, по типу того, что есть на арене 😁
Сообщения автоматически склеены:

Нашел питоновский скрипт. В целом, как альтернатива неплохая думаю 🙂
C-подобный:
import socket

ics = "127.0.0.1:27015"
ip,port = ics.split(":")
port = int(port)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setblocking(1)
s.settimeout(5)
s.connect((ip,port))
s.send('\xFF\xFF\xFF\xFFTSource Engine Query\x00')

try:
    msg = s.recv(1024)
except Exception, e:
    print "Error socket: %s" %e

s.close()
 
Последнее редактирование:

Accelerator

Участник
Сообщения
71
Реакции
17
Не использую данную панель, т.к. многое мне не нужно, предпочитаю компактность и простоту 🙂
Скрипт выше мне в целом подходит, небольшие правки и все будет как надо :)
Сообщения автоматически склеены:

C-подобный:
import sys
import socket
import datetime
import os

if len(sys.argv) < 4:
    print ("format ip:port screen command")
    sys.exit(1)

ics = sys.argv[1]
ip,port = ics.split(":")
port = int(port)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setblocking(1)
s.settimeout(5)
s.connect((ip,port))
s.send('\xFF\xFF\xFF\xFFTSource Engine Query\x00')

try:
    msg = s.recv(1024)
except Exception, e:
    file = open("watchdog.log", "a")
    file.write("{}: {} server freeze\n".format(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), sys.argv[1]));
    file.close();
    os.system("screen -S {} -X quit".format(sys.argv[2]))
    os.system(sys.argv[3])

s.close()

Использование (пример), команда для cron:
* * * * * python watchdog.py 127.0.0.1:27015 CSS /home/server/css/start.sh
Проверяет отклик сервера каждую минуту по указанному ИП и ждет 5 секунд. Если ответ не получен, убивает screen с именем CSS и запускает команду на новый старт. Также записывает инфу о зависоне в лог рядом со скриптом.
 
Последнее редактирование:

Truyn

King of clowns
Сообщения
1,591
Реакции
749
Да самый адекватный вариант, LGSM компактен и прост вроде как.
Достаточно будет прописать значения монитора для сервера раз в сколько то минут,и он будет с уведомлением(если настроить,дискорд,почта и тд) присылать уведомление если сервер невпорядке и перезагружать его.
 

Strangelove

Добрая душа
Сообщения
77
Реакции
35
Интересно, вначале скептически отнесся.
Есть один "проблемный" сервер. Адаптировал скрипт под tmux, посмотрим.

Вообще к файлу watchdog.log нужно наверное абсолютный путь указывать? Не вижу механизмов, которые определяли бы местонахождение скрипта. Или это пайтон сам делает?
 

panikajo

Участник
Сообщения
866
Реакции
233
Этих скриптов уже попой жуй.
Лучше бы уже сделали скрипт который хотя-бы на 70% точно указывает почему сервер лагает и падает.
 

Strangelove

Добрая душа
Сообщения
77
Реакции
35
Этих скриптов уже попой жуй.
Лучше бы уже сделали скрипт который хотя-бы на 70% точно указывает почему сервер лагает и падает.

Отличная идея, как же раньше никто не додумался?) Поди напиши, еще запатентуешь.

хотя-бы на 70% точно
🤣
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,927
  • Команда форума
  • #9
В LGSM как вижу используется такой же метод :)
Это плохой метод, и необходимо перестать его использовать.
В момент смены карты, сервер игнорирует все запросы в свою сторону, и не ответит даже по завершению смены карты.
А теперь попробуйте сами догадаться, что произойдёт, если скрипт решит отправить запрос на сервер когда он меняет карту.
 

Accelerator

Участник
Сообщения
71
Реакции
17
Это плохой метод, и необходимо перестать его использовать.
В момент смены карты, сервер игнорирует все запросы в свою сторону, и не ответит даже по завершению смены карты.
А теперь попробуйте сами догадаться, что произойдёт, если скрипт решит отправить запрос на сервер когда он меняет карту.
Именно для этого сделал опрос до 3х попыток.
 
Сверху Снизу