Як слідкувати за послугою та перезавантажуватися, якщо її зупиняють у Linux


24

Насправді я не настільки впевнений, чи варто використовувати сценарії Shell, чи вже є якісь способи. Але який би підхід ми не використовували, я хотів би постійно підтримувати роботу Служби.

Скажімо, iptablesяк приклад. Потім ..

  • Всякий раз , колиiptables послуга stoppedабо (іншими словами) не працює, я хочу, щоб це було started(або restarted) .. автоматично всякий раз , коли він зупинився (або не працює).
  • В інших більш простих слів, я хочу , щоб зберегти службу і працює весь час.

(Можливо, я можу дати досить частоту перевірки, якщо проблема перевірки в режимі реального часу . Отже, скажімо, кожні 5 хвилин)

Єдиний спосіб, про який я міг придумати, - це використання скриптів Shell із вкладкою Cron.

  • Будь-яке розумне рішення, будь ласка?

Спасибі!


Ти не повинен цього робити. Припустимо, що послуга неправильно налаштована, чого б досягти ваша стратегія? Нескінченний список повторних спроб. Натомість слід написати сценарій crontab, що у alertsвас щось не працює.
MariusMatutiae

Мені просто цікаво пряме рішення, для оригінального питання. А також у мене є Сервіс, який просто повинен бути, restartedколи він зупиняється, з будь-якої причини. Немає проблем із перезапуском.
夏 期 劇場

1
Ваше власне запропоноване рішення досить розумне. Якщо ви користуєтесь ним правильно (вийдіть негайно, якщо служба вже запущена, попередити, що служба припинилася, щоб ви могли її виправити тощо), це найпростіший спосіб. Сервіс, який автоматично зупиняється, є проблематичним сервісом, тому в кінцевому підсумку ви повинні його виправити, але в іншому випадку, як тимчасовий патч, скрипт cron або інший надпростий демон, який спить більшу частину часу, зробить роботу просто чудово. Є такі інструменти, як mmonit.com/monit, але я думаю, що врешті-решт всі вони використовують подібний підхід

@MariusMatutiae, я погоджуюся з вашим питанням, але це залежить від характеру послуги, і більшість менеджерів процесів відступить після ряду невдалих перезавантажень. Це цілком розумно, щоб процес природним чином закінчився, і ми хочемо його перезапустити автоматично, наприклад, працівник, який підбирає роботу з черги і закінчується після кожного запуску. Це також зручний інструмент для системних адміністраторів, які страждають від замовлення коду, що протікає в пам'яті - обмежте час роботи процесу та перезавантажте його автоматично, перш ніж він може вийти з-під руки ...
Alex Forbes

Відповіді:


25

Оновлення березня 2018 року

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

Відповідь нижче збережена для нащадків.


Наведена вище відповідь справедлива, але я подумав, що я згадаю кілька альтернатив:

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

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

Я використовував runit і дуже подобається, але найпростіший у використанні - супервізор. Це також дуже добре документально підтверджено, працює майже де завгодно і пакується у всіх основних дистрибутивах.

Але що б ви не робили, будь ласка, будь ласка, БУДЬ ласка, не використовуйте скрипт оболонки. З таким підходом так багато речей!


як це зробити з систевінітом?
horseyguy

12

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

Точка MariusMatutiae правильна, але ми зробили простий скрипт для моніторингу HTTPD та DNS-сервісу на моєму сервері. Коли служба не працює, скрипт перезапустить службу і зробить попередження про це. Ми отримаємо багато попереджень / повідомлень про послугу вниз, тоді ми можемо провести розслідування щодо неї.
Ranjithkumar T

1

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

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

Приклад: systemctl status httpd.service

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

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


0

Я знаю, що минуло кілька років з моменту того, як було поставлено питання. але за допомогою systemd (в основному це доступно з centos та REHL) ви можете запустити цю команду bash за допомогою cron, щоб перевірити та перезапустити, якщо сервіс не працює.

#!/bin/bash

service=$@
/bin/systemctl -q is-active "$service.service"
status=$?
if [ "$status" == 0 ]; then
    echo "OK"
else
    /bin/systemctl start "$service.service"
fi

збережіть його у своєму каталогу сміття і назвіть його як монітор. Надати відповідний файл на це дозвіл. потім запускайте його як

sudo monitor redis

якщо ви хочете перевірити послугу Redis та, якщо потрібно, перезавантажте / запустити.

останнє додайте це до вашої роботи з cron.

сподіваюся, що це допоможе


0

Щоб додати до довгого списку нагляду за init / svc, як підкаталог S6 на блоці є новий малюк, 66, який обробляє управління послугами s6 та ведення журналів швидко, легко та зручно. Це посилання на офіційну документацію для Obarun-Linux https://web.obarun.org/software

Це FAQ про те, як користуватися цим програмним забезпеченням 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 check files https://repo.obarun.org/iso/

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.