On 08/02/17 01:03 , Artem Chuprina wrote: > Yuriy M. Kaminskiy -> debian-russian@lists.debian.org @ 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 обязан быть один и только один).