Перезапуск всех демонов linux

Автоматический перезапуск сервиса Linux

Иногда сервисы ни с того ни с сего падают и приходиться их вручную восстанавливать. Если для пользователя домашнего компьютера это не критично, потому что если сервис падает во время разработки, то это даже хорошо, можно сразу увидеть что есть проблема. Но на серверах и VPS сервисы должны работать постоянно для обеспечения доступа к веб-сайту или приложению.

В этой инструкции я покажу как настроить автоматический перезапуск сервиса Linux несколькими способами: с помощью скрипта мониторинга периодически запускаемого через cron и в systemd.

Автоматический перезапуск сервиса в systemd

По умолчанию, если ваш сервис будет убит или завершится некорректно, systemd не будет с ним ничего делать. Но можно настроить сервис так, чтобы при падении или даже остановке он автоматически перезапускался. Для этого используется директива Restart, которую надо добавить в секцию Service. Этот параметр может иметь такие значения:

  • on-failure — только если произошла ошибка;
  • on-success — только если процесс сервиса завершился без ошибок;
  • on-abnormal — только если сервис не отвечает;
  • always — перезапускать всегда, когда сервис был остановлен;

Например, рассмотрим настройку автоматического перезапуска сервиса Apache:

sudo systemctl edit apache2 [Service]
Restart=on-failure
RestartSec=5s

Директива RestartSec указывает сколько ждать перед перезапуском сервиса. Когда завершите сохраните изменения и выполните команду daemon-reload, чтобы перечитать конфигурацию:

sudo systemctl daemon-reload

Затем чтобы проверить что всё работает посмотрите состояние процесса, завершите процесс сигналом kill:

Читайте также:  Pdf printer for linux

sudo systemctl status apache2 kill -KILL 32091

И снова посмотрите состояние. Процесс будет запущен. Система инициализации автоматически перезапустит его как только он завершится с кодом возврата ошибки. Если вы хотите чтобы процесс перезапускался всегда, необходимо использовать директиву Restart: always. Однако с ней надо быть осторожным, она вовсе не даст вам завершить процесс, даже если будет необходимо. Для того, чтобы процесс, который постоянно падает не перезапускался, можно добавить лимит на количество перезапусков в секцию Service:

sudo systemctl edit apache2 [Service]
StartLimitIntervalSec=500
StartLimitBurst=5
Restart=on-failure
RestartSec=5s

Директивы StartLimitBurst и StartLimitIntervalSec указывают, что надо попытаться перезапустить сервис пять раз, и если он все эти пять раз упадёт, то больше его не трогать. Вторая директива ограничивает время перезапусков сервиса до 500 секунд.

Автоматический перезапуск сервиса с помощью скрипта

Это самый простой и самый надежный способ работающий абсолютно во всех дистрибутивах Linux и не требующий установки дополнительных утилит. Для того же Apache скрипт выглядит следующим образом:

sudo vi /usr/local/bin/apache-monitor.sh #!/bin/bash
ps -A | grep apache2 || systemctl start apache2

Сохраните файл, сделайте его исполняемым:

chmod ugo+x /usr/local/bin/apache-monitor.sh

Теперь добавьте запись в cron для периодического запуска скрипта:

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

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

Как запустить, остановить и перезапустить сервисы в Linux

img

Linux обеспечивает детальный контроль над системными службами через systemd с помощью команды systemctl. Службы могут быть включены, выключены, перезапущены, перезагружены или даже включены или отключены при загрузке. Если вы используете Debian, CentOSили Ubuntu, ваша система, вероятно, использует systemd.

Как запустить, остановить и перезапустить сервисы в Linux

Это руководство покажет вам, как использовать основные команды для запуска, остановки и перезапуска служб в Linux.

Базовый синтаксис команды systemctl

Основной синтаксис для использования команды systemctl:

systemctl [command] [service_name]

Как правило, вам нужно запускать это как суперпользователь поэтому команды будут начинаться с sudo.

Как проверить, работает ли служба в Linux

Чтобы проверить, активна ли служба или нет, выполните следующую команду:

sudo systemctl status SERVICE_NAME

Замените SERVICE_NAME на нужный сервис.

Читайте также:  Intel graphics for linux mint

В нашем случае мы будем брать за пример веб-сервер Apache.

Интересный факт: в Ubuntu и других дистрибутивах на основе Debian служба Apache называется apache2. В CentOS и других дистрибутивах RedHat служба Apache называется httpd или httpd.service

sudo systemctl status apache2

Так мы проверили состояние Apache. Выходные данные показывают, что служба активна (работает), как на рисунке ниже:

status

Как перезапустить сервис

Чтобы остановить и перезапустить службу в Linux, используйте команду:

sudo systemctl restart SERVICE_NAME

Где SERVICE_NAME — имя вашего сервиса.

После выполнения команды ваш сервис должен снова заработать. Вы можете проверить состояние с помощью команды status

Для перезапуска нашего сервера Apache используем:

sudo systemctl restart apache2

restart

Как перезагрузить конфигурационные файлы сервиса

Чтобы служба перезагрузила свои файлы конфигурации, введите в терминале следующую команду:

sudo systemctl reload SERVICE_NAME

После перезагрузки проверьте ее состояние командой status для подтверждения.

В нашем примере мы перезагрузили Apache, используя:

sudo systemctl reload apache2

reload

Как запустить сервис

Чтобы запустить службу в Linux вручную, введите в терминале следующее:

sudo systemctl start SERVICE_NAME

Например, команда для запуска службы Apache:

sudo systemctl start apache2

Как остановить сервис

Чтобы остановить активную службу в Linux, используйте следующую команду:

sudo systemctl stop SERVICE_NAME

Для нашего апача используем команду

sudo systemctl stop apache2

Проверьте, остановился ли сервис с помощью команды status . Вывод должен показать, что сервис неактивен — inactive (dead)

stop

Как включить сервис при загрузке

Чтобы настроить службу для запуска при загрузке системы, используйте команду:

sudo systemctl enable SERVICE_NAME

Чтобы включить Apache при загрузке системы, выполните команду:

sudo systemctl enable apache2

enable

Как отключить сервис при загрузке

Вы можете запретить запуск службы при загрузке с помощью команды:

sudo systemctl disable SERVICE_NAME
sudo systemctl disable apache2

Источник

Перезапуск systemd без перезагрузки Linux

Всякий раз, когда устанавливается обновление критической бибилотеки библиотеку, к примеру OpenSSL, нам необходимо перезапустить все демоны, которые используют эту библиотеку. Systemd с PID 1 сам также использует OpenSSL. В этой статье представлена инструкция как перезапустить демон systemd другие службы, такие как Nginx, SSHD, Firewalld, не перезагружая Linux.

Читайте также:  Linux write bad file descriptor

Linux

Применение обновлений безопасности для systemd и других приложений в Linux

Первым делом установите обновление с помощью вашего менеджера пакетов

Как получить список служб, нуждающихся в перезапуске в Linux и systemd

Когда обновления применены, мы можем проверить, нуждается ли CentOS / RHEL / Fedora в полной перезагрузке и перезапуске служб:

Мы можем использовать команду needrestart для проверки того, какие демоны необходимо перезапустить после обновления библиотеки в Debian или Ubuntu/Mint Linux:

В OpenSUSE/Suse Enterprise Linux мы можем установить пакет lsof и использовать команду zypper ps для получения списка всех таких служб, которые нуждаются в перезапуске

К сожалению, не в каждом дистрибутиве Linux есть инструменты для определения такого состояния. Не бойтесь. Мы можем использовать команду lsof для получения списка всех таких служб.

lsof | grep -i deleted lsof | grep -i 'lib-name' lsof | grep libssl

Вот как найти все службы, использующие libssl для перезапуска после обновления OpenSSL, используя комбинацию команд grep, awk и других команд

lsof | grep libssl | awk '' | sort | uniq lsof | grep 'DEL.*lib' | cut -f 1 -d ' ' | sort -u

Перезапуск служб Linux

Перезапуск служб с помощью systemctl выполняется следующим образом, чтобы перезапустить службы одну за другой

systemctl restart nginx systemctl restart firewalld

перезапустить все службы, которые этого требуются в CentOS можно следующей конмадой

for s in $(sudo needs-restarting -s); do sudo systemctl restart $s; done

Перезапустить systemd с PID 1 без перезагрузки

Выполните следующую команду

lsof | grep 'DEL.*lib' | cut -f 1 -d ' ' | sort -u

daemon-reexec — Повторное выполнение менеджера systemd. Это приведет к сериализации состояния менеджера, повторному выполнению процесса и повторной десериализации состояния. Эта команда малопригодна, за исключением отладки и обновления пакетов. Иногда она может быть полезна в качестве тяжелой перезагрузки демона. Во время повторного выполнения демона все сокеты, которые systemd прослушивает от имени пользовательской конфигурации, останутся доступными.

Похожие записи:

Источник

Оцените статью
Adblock
detector