Subject: Re: bind9-resolvconf.service



On 08/02/17 01:03 , Artem Chuprina wrote:
> Yuriy M. Kaminskiy -> [email protected] @ Tue, 01 Aug 2017
> 22:42:55 +0300:
>
> >>> [Service]
> >> RemainAfterExit=yes
> >>> ExecStart=/bin/sh -c 'echo nameserver 127.0.0.1 | /sbin/resolvconf -a
> lo.named'
> >>> ExecStop=/sbin/resolvconf -d lo.named
> >>
> >> с этим флагом работает.
>
> > ...а ещё оно должно быть
> > Type=oneshot
> > (по умолчанию - simple).
>
> Ага, я уже нащупал. И когда нащупал, догадался, почему так. Не факт, что

(потому что в simple юнит считается запущенным сразу после /запуска/
процесса из ExecStart, а в oneshot после /завершения/ ExecStart)

> правильно.
>
> В очередной леденящий душу раз спрошу: знает ли кто-нибудь нормальную
> документацию на unit'ы systemd? То, что сходу гуглится, в качестве
> документации не годится. Список значений Type много где есть, но как тот
> же oneshot воспринимается _снаружи_ (и _почему_ в этом месте таки надо
> RemainAfterExit=yes) там не написали.

(из man это вовсе не очевидно, но по если RemainAfterExit не выставлен в
yes, то по завершению процесс(а/ов), запущенных из ExecStart, юнит считается
неактивным, и systemd исполняет ExecStop и ExecStopPost)

> Вот, например, много где описаны оверрайды (это когда хочется подправить
> что-то, не копируя весь юнит). В одном месте мне попалось описание

Если это про foo.service.d/bar.conf, то мне оно попадалось под названием
drop-in, а не override.

(BTW, я с некоторым удивлением обнаружил, что не знаю, а где эти самые
drop-in вообще описаны в man? ни в systemd.directives, ни в systemd.unit
я их не обнаружил 8-0)

> грабли, видимо, автор наступил. И ни в одном - как оно вообще работает.
>
> Судя по названию (override, а не append), оно должно заменять значения
> параметров. Но судя по описанной грабле (нет, там нету описания работы),
> оно их добавляет (что, прямо скажем, удобнее), но если указать пустое
> значение, то сбрасывает то, что было (так можно сбросить старое
> значение).

Кстати, присваивание пустого значения стирает *не все*
параметры-списки (там где оно работает - явно указано в
man, ищем по "empty string|reset"); к примеру (as of jessie), в
Requires/Wants/After и аналогичных оно *не* работает.

> А там при этом бывают параметры, которых можно указать несколько
> (After), а бывают, которые положены одна штука (ExecStart), т.е. к
> которым по семантике добавлять нельзя... Тот наступатель наступил именно
> на примере ExecStart.

... и у Type=oneshot тут есть особенности (*можно* много ExecStart, и
*можно* вообще без ExecStart [таким образом для oneshot ExecStart
очень похож на ExecStartPre]; для прочих типов, ExecStart обязан быть
один и только один).



Programming list archiving by: Enterprise Git Hosting