Как отслеживать работу службы и перезапускать ее в случае остановки в Linux

Как отслеживать работу службы и перезапускать ее в случае остановки в Linux

На самом деле я не уверен, стоит ли мне использовать Shell Scripts, или уже есть какие-то способы. Но какой бы подход мы ни использовали, я бы хотел, чтобы служба работала все время.

Скажем, apache2в качестве примера. Тогда ..

  • В любое времяслужба apache2остановлена ​​или не запущена, я хочу, чтобы она была запущена (или перезапущена) .. автоматически.
  • Проще говоря, я хочу сохранитьУслугапостоянно в рабочем состоянии.

(Может быть, я мог бы дать справедливую частоту для проверки, есливыполнение проверки в режиме реального временивот в чем проблема. Допустим, каждые 5 минут)

Единственный способ, который мне пришел в голову, — это использовать скрипты оболочки с вкладкой Cron.

  • Есть ли какое-нибудь разумное решение?

Спасибо!

решение1

Обновление Март 2018

Этот ответ уже довольно старый, и с тех пор, как он был написан, systemd выиграл войну pid1 в Linux. Таким образом, вам, вероятно, следует создатьсистемдunit, если systemd встроен в ваш дистрибутив (а таких большинство).

Ответ ниже сохранен для потомков.


Ответ monit выше верен, но я подумал, что стоит упомянуть некоторые альтернативы:

Стоит помнить, что ваша операционная система уже решила проблему управления процессами. Традиционно Linux использовал sysvinit, который по сути является набором скриптов, которые вы видите в init.d. Однако он довольно глуп и не может контролировать процессы, скрипты init.d сложны, и его заменяют по веской причине.

Более современные операционные системы начинают заменять sysvinit, и лидерами являются Upstart и Systemd. Debian склоняется к systemd, Ubuntu разрабатывается и уже практически перешла на Upstart, и, как и Debian, Redhat/CentOS/Fedora движутся к systemd. Таким образом, если вы используете ОС, которая уже заменила sysvinit, я бы рекомендовал использовать то, что встроено. Скрипты писать гораздо проще, чем скрипты init.

Я использовал runit и он мне очень понравился, но проще всего использовать supervisor. Он также очень хорошо документирован, работает практически везде и упакован во все основные дистрибутивы.

Но что бы вы ни делали, пожалуйста, пожалуйста, ПОЖАЛУЙСТА, не используйте скрипт оболочки. В этом подходе так много неправильного!

решение2

iptablesплохой пример, так как это не совсем работающая служба или демон, а часть ядра. Вы не можете на самом деле "остановить" iptables, вы можете только дать ему конфигурацию, а "остановка" подразумевает предоставление ему пустой конфигурации. Действительно, у меня были сбои в системах Linux, но настройка переадресации портов с использованием iptablesпродолжает работать.

В любом случае, утилита под названиемmonitсделает то, что вы хотите. Если вы используете Debian, это apt-get install monitдалеко. Это немного сложно для изучения, но очень гибко.

решение3

Мы используем этот простой скрипт для создания оповещения и запуска службы, если она не запущена. Вы также можете добавить больше служб.

 file name: uptime.sh

 #!/bin/bash
 #service monitoring
 /bin/netstat -tulpn | awk '{print $4}' | awk -F: '{print $4}' | grep ^80$ > /dev/null   2>/dev/null
 a=$(echo $?)
 if test $a -ne 0
 then
 echo "http service down" | mail -s "HTTP Service DOWN and restarted now" root@localhost
 /etc/init.d/httpd start > /dev/null 2>/dev/null
 else
 sleep 0
 fi
 /bin/netstat -tulpn | awk '{print $4}' | awk -F: '{print $4}' | grep ^53$ > /dev/null   2>/dev/null
 b=$(echo $?)
 if test $b -ne 0
 then
 echo "named service down" | mail -s "DNS Service DOWN and restarted now" root@localhost
 /etc/init.d/named start > /dev/null 2>/dev/null
 else
 sleep 0
 fi

 Cron setup:
 */5 * * * * /root/uptime.sh > /dev/null 2>/dev/null

решение4

Чтобы добавить к длинному списку init/svc supervisor, в качестве подкаталога S6 есть новый ребенок на блоке, 66, который обрабатывает управление службами s6 и ведение журнала быстрым, легким и удобным для пользователя способом. Это ссылка на официальную документацию для Obarun-Linuxhttps://web.obarun.org/software

Это часто задаваемые вопросы о том, как использовать это программное обеспечение 66 и разобраться в s6.http://sysdfree.wordpress.com/266

С момента его стабильного релиза была обнаружена только одна ошибка, связанная с изменениями ядра с 4.20 на 5.0, все остальные сообщенные проблемы были связаны с тем, что люди узнавали что-то новое. Если бы управление службами должно было стать еще проще, чем сейчас, возможно, было бы лучше перейти на ms-windows (Линус упаси). Чтобы увидеть в реальной жизни, как это может работать, нужно всего лишь загрузить Obarun live.iso и поиграться с ним. Установите службы и их 66-скрипты, включите их, убейте их, посмотрите их журналы, остановите их и запустите (пока они включены), сгруппируйте службы в дерево и запустите и остановите деревья служб все вместе, отделите службы уровня пользователя от системы. Он делает то, что s6 делает хорошо, и упрощает для пользователя эксплуатацию пуленепробиваемой системы под s6.

Загрузить изображения можно здесь:https://web.obarun.org/index.php?id=74 md5 проверить файлыhttps://repo.obarun.org/iso/

За исключением init и управления службами s6/66 не имеют никаких зависимостей от чего-либо еще в системе. Это слой базовой системы, оставляющий остальное программное обеспечение работать самостоятельно, init/svc-mgmt вслепую. Все s6 и 66 написаны на C и не являются специфичными для Linux или glibc. Серверы Skarnet (авторы s6) работают уже почти десятилетие без особых остановок на специально созданной системе musl. Alpine, Void и Adelie в настоящее время также имеют программное обеспечение s6 в своих репозиториях, Adelie использует его для надзора за службами по умолчанию. Void теперь также имеет 66. Я не знаю, портировал ли кто-нибудь s6 на xxBSD или другие системы xxIX и в какой степени.

Связанный контент