[Настройка Linux, Системное администрирование, *nix] Почему хабражители предпочитают велосипеды, вместо готовых решений? Или о systemd, part 0

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
01-Янв-2021 22:30


С Новым Годом, Хабр!
Первого января все нормальные люди занимаются прокрастинацией, уничтожением стратегического запаса оливье и прочими, не связанными с физической или интеллектуальной нагрузкой вещами. Вот и я планировал присоединиться к этой новогодней армии, но не тут-то было!Во всём виноват Хабр!…. Точнее хабражители! А, если ещё точнее, всему виной — предновогодние статьи, в которых два никак не связанных между собой юзера изобрели два почти одинаковых велосипеда. Итак, встречайте моих сегодняшних героев!Как создавался новогодний Хабрачат в этом году
Скачивается бинарник под нужную платформу из релизов на github. Можно положить его, например, в /usr/bin. Далее пишем простой скрипт, который будет перезапускать сервер, в случае падения.… (пропущен башизм с бесконечным циклом и прочими sleep-ами)
© оригиналБезумный дом
В процессе эксплуатации я заметил, что Domoticz иногда падает с ошибкой. Чтобы поднимать его автоматически, напишу watchdog с помощью cron.… (пропущены башизм, на пару с кронтабом)Теперь каждые 5 минут будет запускаться скрипт, который проверит, работает ли Domoticz и перезапустит его, если это необходимо
© оригиналЧто с этим делать и как дальше жить?Я совершенно не планировал писать статью освещающую самые основы systemd, у меня в планах, цикл статей из разряда «systemd для продолжающих», но жизнь, как видно, вносит свои коррективы, в результате пусть моя сегодняшняя, коротенькая статья будет своеобразным прологом к планируемуму циклу. Но так как про написание сервисных юнитов systemd написано 100500 хаутушек, то мы осветим только параметры относящиеся к автоматическому перезапуску сервисов, на конкретных примерах (и на затравку кое что ещё ;-), в применении к статьям двух уважаемых хабровчан.Делаем всё по фен-шуюНу я надеюсь вы тут все достаточно технически грамотные, поэтому я сразу приведу готовые, самодокументированные юниты и конфиги, а так-же команды запуска всего этого безобразия.«Как создавался Хабрачат в этом году»Юнит(/etc/systemd/system/ssh-chat.service):
[Unit]
Description=SSH Chat Service
After=network.target network-online.target
[Service]
# Пользователь и группа с правами которых будет запускаться сервис
User=ssh-chat
Group=ssh-chat
Type=Simple
ExecStart=/usr/local/bin/ssh-chat --admin=/etc/ssh-chat/admins --bind=0.0.0.0:22 --log /var/log/ssh-chat.log --motd=/etc/ssh-chat/motd
# В каких случаях сервис будет автоматически перезагружаться.
# on-failure — в случае выхода с ненулевым кодом возврата.
Restart=on-failure
# Таймаут перед загрузкой сервиса, после падения.
RestartSec=1
# Capablities для сервиса. В данном случае - разрешение сервису
# биндиться на привилегированные порты (< 1000)
AmbientCapablities=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multiuser.target
Конфиг для systemd-sysusers.service(/etc/sysusers.d/ssh-chat.conf):
u ssh-chat - "SSH Chat user" /etc/ssh-chat
# Поля записи:
# u : создаём пользователя
# ssh-chat : username
# - : или UID[:GID] в данном случае автоматически занять свободные UID/GID < 1000
# "SSH Chat user" : Описание, или "-", если не нужно.
# /etc/ssh-chat : Home Directory
# Может быть ещё одно поле -- login shell. По умолчанию /usr/bin/nologin
Инсталляция и запуск:
sudo systemctl restart systemd-sysusers.service && sudo systemctl enable --now ssh-chat
«Безумный дом»Юнит(/etc/systemd/system/domoticz.service):
[Unit]
Description=Domoticz Daemon
After=network.target
[Service]
User=http
Group=http
# Эта директива позволяет выполнять подготовительные действия перед
# запуском сервиса. Модификатор "+" указывает выполнять их от рута.
ExecStartPre=+/usr/bin/install -d -m 0700 -o http -g http /var/run/domoticz
ExecStart=/opt/domoticz/domoticz -www 8080 -pidfile /var/run/domoticz/domoticz.pid
PIDFile=/var/run/domoticz/domoticz.pid
WorkingDirectory=/opt/domoticz
# Всё то же самое, что и в случае "хабрачата", только таймаут 5 секунд.
RestartSec=5
Restart=on-failure
[Install]
WantedBy=multi-user.target
Инсталляция и запуск:
sudo systemctl enable --now domoticz
Что дальше?Возможности systemd, кратко освещённые в этой статье, а так-же многие другие, более подробно будут разобраны в следующих статьях цикла. Триггеры, поддержка бинарных форматов, «прозрачные»(transient) юниты, встроенная контейнеризация and more, more... Но нетерпеливые могут уже «вот прям щаз» заняться чтением одной из лучших документаций в мире линукс. Маны которые можно почитать по сегодняшней теме:
man systemd.unit
man systemd.service
man systemd.exec
man systemctl
man sysusers.d
man systemd-sysusers
И на закуску маленький секрет. Один из моих любимых манов: man systemd.directives - путеводитель по всем директивам конфигурации которые могут встретиться вам в процессе изучения systemd. Ещё раз С новым Годом, Хабр! И используйте правильные инструменты! PS: Добавил ссылку на ман по systemd.exec. Как-то я про него малость забыл.
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_nastrojka_linux (Настройка Linux), #_sistemnoe_administrirovanie (Системное администрирование), #_*nix, #_systemd, #_linux, #_faulttolerant, #_nastrojka_linux (
Настройка Linux
)
, #_sistemnoe_administrirovanie (
Системное администрирование
)
, #_*nix
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 25-Ноя 06:13
Часовой пояс: UTC + 5