На самом деле я не уверен, стоит ли мне использовать Shell Scripts, или уже есть какие-то способы. Но какой бы подход мы ни использовали, я бы хотел, чтобы служба работала все время.
Скажем, apache2
в качестве примера. Тогда ..
- В любое времяслужба
apache2
остановлена или не запущена, я хочу, чтобы она была запущена (или перезапущена) .. автоматически. - Проще говоря, я хочу сохранитьУслугапостоянно в рабочем состоянии.
(Может быть, я мог бы дать справедливую частоту для проверки, есливыполнение проверки в режиме реального временивот в чем проблема. Допустим, каждые 5 минут)
Единственный способ, который мне пришел в голову, — это использовать скрипты оболочки с вкладкой Cron.
- Есть ли какое-нибудь разумное решение?
Спасибо!
решение1
Обновление Март 2018
Этот ответ уже довольно старый, и с тех пор, как он был написан, systemd выиграл войну pid1 в Linux. Таким образом, вам, вероятно, следует создатьсистемдunit, если systemd встроен в ваш дистрибутив (а таких большинство).
Ответ ниже сохранен для потомков.
Ответ monit выше верен, но я подумал, что стоит упомянуть некоторые альтернативы:
- Руководитель
- DAEMON Tools
- daemontools-encore
- запустить его
- Выскочка
- системд
- сисвинит
- с6
- преступник
- перекус
Стоит помнить, что ваша операционная система уже решила проблему управления процессами. Традиционно 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 и в какой степени.