Существует множество причин сбоя / падения процесса в системе Linux, которые вы можете исследовать и устранить, но это может занять некоторое время.
Но одна вещь, которую вы можете сделать немедленно, чтобы перевести службу в оперативный режим, – это автоматический запуск, когда служба выходит из строя, что в конечном итоге сокращает время простоя и улучшает доступность.
Убедитесь, что ваш сервис всегда будет доступен для пользователей.
Это очень легко автоматизировать в системах systemd, поскольку в systemd есть опции, позволяющие это сделать.
Это также можно сделать с помощью bash-скрипта.
Что такое systemd?
Systemd – это новая система инициализации и менеджер системы, которая была внедрена / адаптирована во все основные дистрибутивы Linux поверх традиционных систем инициализации SysV.
systemd совместим со скриптами инициализации SysV и LSB.
Он может работать в качестве замены для системы sysvinit.
systemd – это первый процесс, запускаемый ядром и содержащий PID 1.
Это родительский процесс для всего, и Fedora 15 является первым дистрибутивом, который был адаптирован systemd вместо upstart.
systemctl – это утилита командной строки и основной инструмент для управления демонами / службами systemd, а именно (запуск, перезапуск, остановка, включение, отключение, перезагрузка и состояние).
systemd использует файлы .service вместо скриптов bash (используемых SysV init). systemd сортирует все демоны в свои собственные cgroups Linux, и вы можете увидеть иерархию системы, изучив файл /cgroup/systemd.
Сервисный файл systemd состоит из трех основных частей, и нам нужно добавить ниже обязательные параметры в разделе [Serivece]
[Unit] ... [Service] Restart=on-failure RestartSec=5s ... [Install] ...
- Restart: определяет, будет ли служба перезапущена, когда процесс службы завершается, завершается или по истечении времени ожидания.
- on-failure: если установлено значение on-failuire, служба будет перезапущена, когда процесс завершится с ненулевым кодом выхода, завершится с помощью сигнала, когда истечет время ожидания операции (например, перезагрузки службы), и когда настроен тайм-аут сторожевого таймера.
- EstRestartSec: настраивает время ожидания перед перезапуском службы. Принимает значение без единиц измерения в секундах или значение промежутка времени, например «5min 20s». По умолчанию 100 ms.
- S5s: он будет ждать 5 секунд, а затем запустить службу.
Как добавить параметр службы автоматического запуска в systemd System?
Для этого откройте соответствующий файл службы и добавьте следующие параметры.
Чтобы объяснить все это на примере, мы собираемся протестировать сервис httpd.
# vi /etc/systemd/system/multi-user.target.wants/httpd.service [Unit] Description=Apache Web Server After=network.target remote-fs.target nss-lookup.target [Service] Type=simple ExecStart=/usr/bin/httpd -k start -DFOREGROUND ExecStop=/usr/bin/httpd -k graceful-stop ExecReload=/usr/bin/httpd -k graceful PrivateTmp=true LimitNOFILE=infinity KillMode=mixed Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target
# systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2019-08-05 16:45:24 CDT; 27min ago Docs: man:httpd(8) man:apachectl(8) Process: 14420 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE) Main PID: 14424 (httpd) Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec" CGroup: /system.slice/httpd.service ├─14424 /usr/sbin/httpd -DFOREGROUND ├─14425 /usr/sbin/httpd -DFOREGROUND ├─14426 /usr/sbin/httpd -DFOREGROUND ├─14427 /usr/sbin/httpd -DFOREGROUND ├─14428 /usr/sbin/httpd -DFOREGROUND └─14429 /usr/sbin/httpd -DFOREGROUND Aug 05 16:45:23 thvtstrhl7 systemd[1]: Stopped The Apache HTTP Server. Aug 05 16:45:23 thvtstrhl7 systemd[1]: Starting The Apache HTTP Server... Aug 05 16:45:24 thvtstrhl7 systemd[1]: Started The Apache HTTP Server. Warning: httpd.service changed on disk. Run 'systemctl daemon-reload' to reload units.
# systemctl daemon-reload
# systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2019-08-05 16:45:24 CDT; 27min ago Docs: man:httpd(8) man:apachectl(8) Main PID: 14424 (httpd) Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec" CGroup: /system.slice/httpd.service ├─14424 /usr/sbin/httpd -DFOREGROUND ├─14425 /usr/sbin/httpd -DFOREGROUND ├─14426 /usr/sbin/httpd -DFOREGROUND ├─14427 /usr/sbin/httpd -DFOREGROUND ├─14428 /usr/sbin/httpd -DFOREGROUND └─14429 /usr/sbin/httpd -DFOREGROUND Aug 05 16:45:23 thvtstrhl7 systemd[1]: Stopped The Apache HTTP Server. Aug 05 16:45:23 thvtstrhl7 systemd[1]: Starting The Apache HTTP Server... Aug 05 16:45:24 thvtstrhl7 systemd[1]: Started The Apache HTTP Server.
# pidof httpd 14429 14428 14427 14426 14425 14424
# kill -9 14429 14428 14427 14426 14425 14424
# systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: activating (auto-restart) (Result: exit-code) since Mon 2019-08-05 17:14:26 CDT; 2s ago Docs: man:httpd(8) man:apachectl(8) Process: 15978 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE) Process: 14424 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=killed, signal=KILL) Main PID: 14424 (code=killed, signal=KILL) Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec" Aug 05 17:14:26 thvtstrhl7 systemd[1]: httpd.service: control process exited, code=exited status=1 Aug 05 17:14:26 thvtstrhl7 systemd[1]: Unit httpd.service entered failed state. Aug 05 17:14:26 thvtstrhl7 systemd[1]: httpd.service failed.
# systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2019-08-05 17:14:31 CDT; 564ms ago Docs: man:httpd(8) man:apachectl(8) Process: 15978 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE) Main PID: 15987 (httpd) Status: "Processing requests..." CGroup: /system.slice/httpd.service ├─15987 /usr/sbin/httpd -DFOREGROUND ├─15988 /usr/sbin/httpd -DFOREGROUND ├─15989 /usr/sbin/httpd -DFOREGROUND ├─15990 /usr/sbin/httpd -DFOREGROUND ├─15991 /usr/sbin/httpd -DFOREGROUND └─15992 /usr/sbin/httpd -DFOREGROUND Aug 05 17:14:31 thvtstrhl7 systemd[1]: Starting The Apache HTTP Server... Aug 05 17:14:31 thvtstrhl7 systemd[1]: Started The Apache HTTP Server.