TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • flag Russian
    Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Региональные подборки Тематические подборки Платные каналы Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
  • Продвижение
    Реклама через Яндекс Бизнес Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
NetworkAdmin.ru

24 Aug, 11:55

Открыть в Telegram Поделиться Пожаловаться

❤️ systemctl edit: как правильно переопределять юниты без правки vendor-файлов

В systemd часто нужно чуть-чуть изменить стандартный unit, который приехал из пакета. Например:

• добавить автоматический рестарт;
• изменить переменные окружения;
• переопределить ExecStart;
• добавить лимиты;
• поменять рабочий каталог;
• настроить зависимости.

Плохая идея - править vendor-unit напрямую где-нибудь в:


/lib/systemd/system/

или:


/usr/lib/systemd/system/

После обновления пакета такие изменения могут потеряться или конфликтовать с новой версией юнита.Правильнее использовать override. Покажу на примере nginx.service.

1️⃣ Сначала смотрим полный unit:


systemctl cat nginx.service

Это очень удобная команда. Она показывает не только содержимое unit-файла, но и путь, откуда он загружен. Если для сервиса уже есть override-файлы, они тоже будут показаны в этом же выводе.

2️⃣ Теперь добавим автоперезапуск nginx при падении:


systemctl edit nginx.service

3️⃣ Откроется редактор. Добавляем:


[Service]
Restart=always
RestartSec=5s

4️⃣ Сохраняем и выходим. systemd сам создаст drop-in файл примерно здесь:


/etc/systemd/system/nginx.service.d/override.conf

5️⃣ Проверяем результат:


systemctl cat nginx.service

Теперь в выводе будет видно и исходный unit, и наш override.

6️⃣ После изменения обычно стоит выполнить:


systemctl daemon-reload
systemctl restart nginx.service

И проверить:


systemctl status nginx.service

Важный нюанс: не все параметры переопределяются одинаково. Если вы добавляете новый параметр, обычно достаточно просто указать его. Например:


[Service]
Restart=always
RestartSec=5s

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

▪️ Классический пример - ExecStart. Если в основном unit было:


ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'

А вы хотите заменить команду запуска, нужно сделать так:


[Service]
ExecStart=
ExecStart=/usr/sbin/nginx -g 'daemon off; master_process off;'

Первая строка очищает старое значение. Вторая задает новое. Если просто добавить новый ExecStart, systemd может выдать ошибку или оставить некорректную конфигурацию. То же часто касается параметров семейства:


ExecStart=
ExecStartPre=
ExecStartPost=
ExecReload=
ExecStop=

▪️ Аналогичная логика может понадобиться и для некоторых списочных настроек. Если override "почему-то не работает", полезно проверить итоговую конфигурацию:


systemctl cat nginx.service

И затем:


systemd-analyze verify /etc/systemd/system/nginx.service.d/override.conf

Еще полезная команда:


systemctl revert nginx.service

Она удалит локальные override и вернет unit к vendor-состоянию.

#linux #systemd

🧑‍💻 NetworkAdmin

338 0 23 6
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot