Сценарий Bash для обнаружения, когда мой сервер снижается или в режиме офлайн

Примечания добавляются 8 июля 2014: Как Riccardo Murri указал, мой ответ только ниже шоу, сообщает ли процессор для поддержки гиперпоточности. Обычно *отклоняют O/S, настроены для включения гиперпоточности, если поддерживается. Однако для фактической проверки этого программно см., например, ответ Nils!

----Исходный ответ с 25 марта 2012:

Вы действительно на правильном пути :) с

dmidecode -t processor | grep HTT

На Linux я обычно просто ищу "ht" на строке "флагов" /proc/cpuinfo. Посмотрите, например,

grep '^flags\b' /proc/cpuinfo | tail -1

или если Вы хотите включать "ht" в шаблон

grep -o '^flags\b.*: .*\bht\b' /proc/cpuinfo | tail -1

(\b соответствует границам слова и помогает избежать ложных положительных сторон в случаях, где "ht" является частью другого флага.)

17
23.11.2012, 00:58
4 ответа

Если бы у Вас есть отдельный сервер для запущения скрипта проверки на, что-то вроде этого сделало бы простой тест Ping, чтобы видеть, жив ли сервер:

#!/bin/bash
SERVERIP=192.168.2.3
NOTIFYEMAIL=test@example.com

ping -c 3 $SERVERIP > /dev/null 2>&1
if [ $? -ne 0 ]
then
   # Use your favorite mailer here:
   mailx -s "Server $SERVERIP is down" -t "$NOTIFYEMAIL" < /dev/null 
fi

Вы можете крон сценарий для выполнения периодически.

Если у Вас нет mailx, необходимо будет заменить ту строку любой почтовой программой командной строки, Вы имеете и вероятно изменяете опции. Если Ваш поставщик услуг вводит адрес электронной почты SMS, можно послать электронное письмо тому адресу. Например, с AT&T при отправке электронного письма phonenumber@txt.att.net оно пошлет электронное письмо телефону.

Вот список электронной почты к шлюзам SMS:

http://en.wikipedia.org/wiki/List_of_SMS_gateways

Если Ваш сервер является публично доступным веб-сервером, существуют некоторые бесплатные сервисы контролировать Ваш веб-сайт и предупредить Вас, если он снижается, ищите сеть бесплатный вебсайт, контролирующий для нахождения некоторых.

24
27.01.2020, 19:46
  • 1
    Можно ли сделать деталь относительно сообщения предупреждения SMS? –  Md Mahbubur Rahman 22.11.2012, 06:16
  • 2
    Вместо того, чтобы проверить с помощью ping-запросов сервер, необходимо протестировать то, чем случается так, что Вы заботитесь о выполнении сервера. Например, если это - почтовый сервер, намного более важно, чтобы это успешно отправило и получило почту. –  Jim Paris 22.11.2012, 08:52
  • 3
    я избегал обнаружения приложения в своем ответе начиная с вопроса, не указывал, какие сервисы работают на сервере - он попросил сервера/вниз у обнаружения. Существуют сотни общего обслуживания, которое могло быть обнаружено и неограниченное количество пользовательских приложений. Это кажется, что у него есть монитор локальной службы (sysload), это контролирует сервисы. –  Johnny 22.11.2012, 19:20

Проверка с помощью ping-запросов является опцией, но во многих случаях машина сможет отправить ответ ping, в то время как фактический сервер, о котором это - все, снижается. Это лучше, делают сквозной тест. В ниже примера страницу требуют от веб-сервера.

Если бы это - веб-сервер, это выглядело бы примерно так:

#!/bin/bash
wget -qO /dev/null 'http://webserver/some_existing_short_document.html' || {
    echo "Webserver down"
    # another mailer example
    sendemail -s mailserverip -f 'from@localhost' -t 'user@localhost' -u 'Webserver down' -m 'The webserver is down'
}

Если Вы изменяете документ HTML в php документ и делаете de тестовые вещи сценария PHP как соединение с базой данных, файловые системы и т.д., можно даже протестировать больше аспектов сервера. Тем путем можно запустить превентивный контроль машины (см. проблемы, прежде чем они заставят сервер отказать).

Похожий с проверкой mailserver, но вместо того, чтобы запросить веб-страницу, Вы просто посылаете электронное письмо через mailserver и видите, получаете ли Вы его в своем почтовом ящике

9
27.01.2020, 19:46
  • 1
    , если Вы получили корневую электронную почту, пересланную к Вашему ящику входящих сообщений, Вы не имеете к sendmail при выполнении этого сценария в crontab (потому что он отправит stdout Вам) –  pscheit 13.12.2017, 12:52

Вот то, как я решил ту же проблему

#!/bin/bash
NOTIFYEMAIL=<your email>
SMSEMAIL=<cell phone number @ sms-gateway>
SENDEREMAIL=alert@localhost
SERVER=http://127.0.0.1/
PAUSE=60
FAILED=0
DEBUG=0

while true 
do
/usr/bin/curl -sSf $SERVER > /dev/null 2>&1
CS=$?
# For debugging purposes
if [ $DEBUG -eq 1 ]
then
    echo "STATUS = $CS"
    echo "FAILED = $FAILED"
    if [ $CS -ne 0 ]
    then
        echo "$SERVER is down"

    elif [ $CS -eq 0 ]
    then
        echo "$SERVER is up"
    fi
fi

# If the server is down and no alert is sent - alert
if [ $CS -ne 0 ] && [ $FAILED -eq 0 ]
then
    FAILED=1
    if [ $DEBUG -eq 1 ]
    then
        echo "$SERVER failed"
    fi
    if [ $DEBUG = 0 ]
    then
        echo "$SERVER went down $(date)" | /usr/bin/mailx -s "$SERVER went down" -r "$SENDEREMAIL" "$SMSEMAIL" 
        echo "$SERVER went down $(date)" | /usr/bin/mailx -s "$SERVER went down" -r "$SENDEREMAIL" "$NOTIFYEMAIL" 
    fi

# If the server is back up and no alert is sent - alert
elif [ $CS -eq 0 ] && [ $FAILED -eq 1 ]
then
    FAILED=0
    if [ $DEBUG -eq 1 ]
    then
        echo "$SERVER is back up"
    fi
    if [ $DEBUG = 0 ]
    then
        echo "$SERVER is back up $(date)" | /usr/bin/mailx -s "$SERVER is back up again" -r "$SENDEREMAIL" "$SMSEMAIL"
        echo "$SERVER is back up $(date)" | /usr/bin/mailx -s "$SERVER is back up again" -r "$SENDEREMAIL" "$NOTIFYEMAIL"
    fi
fi
sleep $PAUSE
done
5
27.01.2020, 19:46
  • 1
    я должен был адаптироваться для работы моего Mac /usr/bin/mail -s "$SERVER went down" "$SENDEREMAIL" "$SMSEMAIL" . верный –  MikeiLL 13.04.2015, 20:20

сортировать и head можно:

numbers=(1 4 3 5 7 1 10 21 8)
printf "%d\n" "${numbers[@]}" | sort -rn | head -1       # => 21
-121--11325-

Из команды ldd выглядит так, будто двоичный файл ищет в /lib/x86 _ 64-linux-gnu , а не /usr/lib/x86 _ 64-linux-gnu , где

Попробуйте запустить их и посмотреть, если вы все еще получите ту же ошибку:

sudo ln -s /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 /lib/x86_64-linux-gnu/libcrypto.so.6
sudo ln -s /lib/x86_64-linux-gnu/libssl.so.1.0.0 /lib/x86_64-linux-gnu/libssl.so.6
-121--61385-

Я бы настоятельно рекомендовал использовать Nagios , это инфраструктура для мониторинга и оповещения о любой услуге вы хотите (многие плагины доступны и вы можете написать свой собственный). Конечно, он может выполнять простые команды ping, чтобы проверить доступность серверов, но, как указали другие, лучше проверить доступность услуг (например, веб, электронная почта и т.д.) вместо этого (что nagios может сделать легко).

1
27.01.2020, 19:46

Теги

Похожие вопросы