•••
Не, мне systemd
в целом симпатичен; понятно, что SysV-style init
давно пора на свалку, и systemd
в качестве замены всяко лучше, чем какой-нибудь upstart
. Но какого ж хрена он не перезагружает юниты автоматически?!
Я всё понимаю, мониторить директории — моветон. Но если я вручную перезагружаю systemd-logind.service
, не логично ли заодно перечитать все зависимости?!
У меня UPS специфичный: если драйвер не выгрузить, уходя в suspend, потом очень сложно заставить его работать после пробуждения. Вопрос решается элементарно, давно был написан хук для pm-utils
, который при засыпании выгружал драйвер (и upsmon
, чтобы не ругался), а при пробуждении запускал обратно. Собственно, именно это я и переносил сегодня на systemd
.
На вкуривание того, как организован сон в systemd
, ушло минут десять. На понимание того, как писать юниты, которые будут исполнять роль pm-хуков — ещё минут пять.
На отладку — полтора часа!
Потому что после написания юнит надо включить (и в логе это пишется) а потом перезапустить systemd-logind
. После правки включённого юнита нужно его снова включить, причём в логе не пишется ничего, а потом, опять же, перезапустить systemd-logind
. Понимание того, что в этой последовательности критичен каждый шаг, приходит ой как не сразу…
Системный лог при отладке засыпаний-пробуждений выходит длинный и с кучей повторов; чтобы разобраться, кто за что отвечает при перезапуске, приходится читать подряд… И вот отладил ты ту часть, которая выгружает всё при засыпании, и начал ковырять пробуждение — а в логе после пробуждения ничего нет, будто юнит и не отрабатывает вовсе. Ну да, не отрабатывает, в ExecStop
синтаксическая ошибка вышла, вот только сообщение об этом в логе находится где? Правильно, на этапе засыпания! Потому что юнит впервые запущен тогда, и тогда же его парсер тормознул, несмотря на рабочий ExecStart
…
В общем, я сегодня очень хорошо понимаю сторонников классического init
.
Реакции
KJames Peace