22

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

Скажем, iptables в качестве примера. Затем ..

  • Всякий раз, когда служба iptables stopped или (другими словами) не запущена, я хочу, чтобы она started (или restarted) ... автоматически, когда она остановилась (или не работает).
  • Другими словами, я хочу, чтобы Служба работала постоянно.

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

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

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

Спасибо!

4 ответа4

24

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

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

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


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

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

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

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

Но что бы вы ни делали, пожалуйста, пожалуйста, не используйте сценарий оболочки. С таким подходом так много всего плохого!

10

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

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

2

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

 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
1

Альтернативное решение для рабочего стола (KDE):

Мы можем наблюдать за сервисом со статусом сервера приложений / виджетов ... после установки просто добавьте команду в виджет для мониторинга вашего сервиса

Пример: systemctl status httpd.service

Версия KDE 4: https://store.kde.org/content/show.php?content=101336

Версия KDE 5: https://store.kde.org/p/1190292/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .