[sisyphus] systemd-network

Alexey Shabalin a.shabalin на gmail.com
Пт Авг 15 22:39:19 MSK 2014


15 августа 2014 г., 20:29 пользователь Денис Смирнов
<mithraen на freesource.info> написал:
> On Fri, Aug 15, 2014 at 07:50:18PM +0400, Mikhail Efremov wrote:
>
>>> Тут засада -- это-ж oneshot по изменению файла. Так что ExecStop
>>> бесполезен.
>> Разве? Мне казалось, что ExecStop должен выполняться в любом случае при
>> остановке сервиса.
>
> Именно! А кто у нас будет его _останавливать_? У нас есть событие для
> запуска, которое его дергает, но нет события, которое бы делало stop.
>
>> А с RemainAfterExit он должен считаться запущенным.
>> Хотя с RemainAfterExit может быть другая проблема, я не знаю какое
>> будет поведение при следующем изменении файла. Он, часом, не
>> проигнорирует запуск т.к. сервис уже running?
>> Проверять надо. Может на следующей неделе в kvm попробую если время
>> будет.
>
>>> А что самое печальное -- при остановке systemd-resolved сгенерированый им
>>> файлик не удаляется. И как реагировать на удаление (если делать его в
>>> ExecStopPost у самого resolved) я тоже не нашел.
>> Можно удалять файл в ExecStopPost в systemd-resolved.service и
>> запускать /sbin/resolvconf -fd systemd-networkd и там тоже. Или даже
>> только там.
>
> Ага, то есть проверять на наличие /sbin/resolvconf, и если есть --
> выполнять. Логично.

Отправляю в сизиф то, что выдали.

я бы вообще не делал нового юнита altlinux-openresolv.service, а
просто добавил бы:
ExecStartPost и ExecStopPost прямо в systemd-resolved.service.
если указать команды начиная с "-" (=-/bin/sh.....) то юнит не будет
ругаться на отсутствующий /sbin/resolvconf.

ExecStartPost=-/bin/sh -c '/sbin/resolvconf -a systemd-networkd <
/run/systemd/resolve/resolv.conf'
ExecStopPost=-/sbin/resolvconf -fd systemd-networkd

А с другой стороны, в altlinux-openresolv.service(или path) можно
проверять наличие симлинка /etc/resolv.conf и не запускаться, вдруг
уже кто-то использует без openresolv.
ConditionPathIsSymbolicLink=!/etc/resolv.conf
еще в altlinux-openresolv.service можно добавить
ReloadPropagatedFrom=systemd-resolved.service
или даже лучше
PartOf=systemd-resolved.service

-- 
Alexey Shabalin


Подробная информация о списке рассылки Sisyphus