Если тебе необходимо изменить файл сервиса в Linux, не нужно пиздовать ручками в папку
А бест-практика уже заложена в
Достаточно выполнить команду:
Откроется редактор с нужным сервисом. НО, редактировать ты будешь не корневой юнит, а
ㅤ
В моём случае с nginx будет открыт файл:
В нем я переопределяю нужные параметры для сервиса и НЕ трогаю основной файл юнита.
А если я хочу править корневой?
Да похуй, вот тебе команда:
Теперь будет открыт основной файл сервиса, можешь лезть в него своими шаловливыми ручонками и создавать проблемы.
1. Копирует оригинальный юнит-файл из
2. Открывает его в редакторе.
3. После сохранения — systemd использует именно эту копию в
Как проверить валидность файла юнита?
В ответ получишь:
Ага, ошибочка, правим и только после этого можно делать:
Короче учись работать правильно и всё у тебя будет хорошо!
С пятницей! Хороших тебе предстоящих выходных и береги себя!
🛠 #linux #tricks #debug #systemd
—
✅ @bashdays / @linuxfactory / @blog
/etc/systemd искать и править его.Постоянно вижу этот кейс, чёто там ищут по папкам, ебутся. Правят оригинальный файл и все к хуям ломают.
А бест-практика уже заложена в
systemctl!Достаточно выполнить команду:
sudo systemctl edit nginx
Откроется редактор с нужным сервисом. НО, редактировать ты будешь не корневой юнит, а
override. То есть прокладку, которая переопределит параметры основного юнита.ㅤ
В моём случае с nginx будет открыт файл:
/etc/systemd/system/nginx.service.d/override.confВ нем я переопределяю нужные параметры для сервиса и НЕ трогаю основной файл юнита.
А если я хочу править корневой?
Да похуй, вот тебе команда:
sudo systemctl edit --full nginx
Теперь будет открыт основной файл сервиса, можешь лезть в него своими шаловливыми ручонками и создавать проблемы.
1. Копирует оригинальный юнит-файл из
/lib/systemd/system/nginx.service в /etc/systemd/system/nginx.service 2. Открывает его в редакторе.
3. После сохранения — systemd использует именно эту копию в
/etc/.Это безопасный способ редактировать полные юниты, без риска перезаписи при обновлении пакетов.
Есть еще ключ --force, но про него погугли сам.
Как проверить валидность файла юнита?
systemd-analyze verify /etc/systemd/system/nginx.service
В ответ получишь:
/etc/systemd/system/nginx.service:31: Missing '=', ignoring line.
Ага, ошибочка, правим и только после этого можно делать:
sudo systemctl daemon-reload
sudo systemctl restart nginx
Короче учись работать правильно и всё у тебя будет хорошо!
С пятницей! Хороших тебе предстоящих выходных и береги себя!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
8 211
Сегодня будем профилировать Linux сервисы.
В прошлый раз мы с тобой посмотрели, как без хуйни обращаться с юнитами.
Сегодня же посмотрим, как определить какие юниты дольше всего грузятся при старте системы.
Запускаем и смотрим:
По итогу получаем список юнитов и их время запуска.
В моём примере дольше всего грузится служба с докером.
ㅤ
Отрубаем службу и радуемся приросту в 17 секунд. Но НЕТ! На самом деле тут всё немного сложнее.
Иногда сам юнит стартует достаточно быстро, но сука ждет другой юнит, который «Блиц — скорость без границ».
Смотрим цепочку зависимостей:
Ага, то есть дело тут не только в юните докера, юнит ждет другой юнит, в нашем случае докер ждет пока на сервере поднимется сетка.
То есть
Почему так?
Docker по умолчанию может иметь
А чё делать?
Выйти из айти, купить яхту и поехать ловить крабов.
Если тебе нужно, чтобы Docker НЕ ждал сеть, поменяй юнит:
Ну или вообще убрать
После этого снова смотрим выхлоп через
Всё блядь! Теперь докер не тормозит загрузку, но после загрузки системы докер исправно работает.
Вот такими хитрыми манипуляциями можно профилировать это говнище. Не скажу что часто этим пользуюсь, но всегда держу на вооружении.
Забирай в копилку, для дебага маст-хев!
🛠 #linux #tricks #debug #systemd
—
✅ @bashdays / @linuxfactory / @blog
В прошлый раз мы с тобой посмотрели, как без хуйни обращаться с юнитами.
Сегодня же посмотрим, как определить какие юниты дольше всего грузятся при старте системы.
Это достаточно пиздатый хак, особенно при отладке медленного запуска системы. Ну и изобретать нам ничего не придется, всё уже придумали за нас.
Запускаем и смотрим:
systemd-analyze blame
По итогу получаем список юнитов и их время запуска.
17.084s docker.service
10.961s systemd-journal-flush.service
7.595s containerd.service
7.496s cloud-final.service
7.189s cloud-init-local.service
3.260s apt-daily-upgrade.service
2.522s cloud-init.service
2.095s dpkg-db-backup.service
1.991s networkd-dispatcher.service
1.963s chrony.service
В моём примере дольше всего грузится служба с докером.
ㅤ
Отрубаем службу и радуемся приросту в 17 секунд. Но НЕТ! На самом деле тут всё немного сложнее.
Иногда сам юнит стартует достаточно быстро, но сука ждет другой юнит, который «Блиц — скорость без границ».
Смотрим цепочку зависимостей:
systemd-analyze critical-chain
└─docker.socket @13.269s +8ms
└─sysinit.target @13.261s
└─cloud-init.service @10.735s +2.522s
└─systemd-networkd-online.service @12.806s +31ms
└─systemd-networkd.service @12.741s +59ms
Ага, то есть дело тут не только в юните докера, юнит ждет другой юнит, в нашем случае докер ждет пока на сервере поднимется сетка.
То есть
docker.service зависит от systemd-networkd-wait-online.service, ну и дальше пошли по цепочке.Почему так?
Docker по умолчанию может иметь
After=network-online.target, а при использовании systemd-networkd это приводит к ожиданию systemd-networkd-wait-online.service.А чё делать?
Если тебе нужно, чтобы Docker НЕ ждал сеть, поменяй юнит:
sudo systemctl edit docker.service
[Unit]
After=network.target
Wants=network.target
Ну или вообще убрать
After=network-online.target, если нет зависимости от сети на старте.После этого снова смотрим выхлоп через
blame:4.739s cloud-init-local.service
4.041s containerd.service
2.329s dev-sda1.device
Всё блядь! Теперь докер не тормозит загрузку, но после загрузки системы докер исправно работает.
Вот такими хитрыми манипуляциями можно профилировать это говнище. Не скажу что часто этим пользуюсь, но всегда держу на вооружении.
Забирай в копилку, для дебага маст-хев!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
3 128