[sisyphus] systemd & network on boot

diver diver666 на gmail.com
Пт Авг 22 15:55:09 MSK 2014


2014-08-22 14:33 GMT+03:00 Денис Смирнов:

> On Fri, Aug 22, 2014 at 12:03:56PM +0300, diver wrote:
>
>
> > root на office:~$ systemctl status network
> > ● network.service - Network Connectivity
> >    Loaded: loaded (/etc/systemd/system/network.service; enabled)
> >    Active: inactive (dead)
>
> О, я понял. Он enabled, но его никто не вытягивает!
> Там ошибка в секции Install -- нужно добавить кроме
>
> WantedBy=network-online.target
> еще и:
> WantedBy=network.target
>
> и сделать:
> systemctl deamon-reload
> systemctl reenable network.service
>
> К сожелению, опять не помогло.

$ systemctl status network
● network.service - Network Connectivity
   Loaded: loaded (/etc/systemd/system/network.service; enabled)
   Active: inactive (dead)


$ systemctl list-dependencies network.service --reverse
network.service
●(green) ├─network-online.target
│   └─...
●(red) └─network.target

> Ну допустим, но почему нет никаких сообщений в лог ? как это предлагается
> > штатно диагностировать? безотносительно к текущей проблема, а в целом. Не
> > будут же люди все время коллективно решать такие проблемы в рассылках?
> Да и
> > не всегда есть сеть.
>
> Потому что его никто не запускает, вот и нет сообщений в лог.
>
> Это одна из самых неочевидных особенностей systemd для админа при первом
> знакомстве.
>
> Дело в том, что в systemd вообще нет понятия enable/disable аналогичного
> тому, что в sysvinit.
>
> В процессе загрузки systemd пытается "запустить" default.target. Смотрит
> на его зависимости (wants/requires) и запускает указанное. И так
> рекурсивно.
>
> А systemctl enable делает только одно -- оно смотрит в секцию Install
> указанного сервиса, и создает соответствующие симлинки.
>
> А вот дальше начинается самое интересное -- etcnet сейчас зависит от
> network-online.target. Причем он должен запуститься _до_ этого самоего
> network-online.target.
>
> Но network-online.target вытягивается исключительно теми сервисами,
> которые требуют обязательно поднятой сети до своего старта. Если вдруг у
> вас на машине не оказалось ни одного такого сервиса -- запускать сеть
> некому.
>
> network.target от network-online.target отличается тем, что первый требует
> чтобы сеть запустилась, а второй -- чтобы сеть была установлена до
> продолжения загрузки.
>
> А необходимость в local-fs.target тоже следствие подобной интересной
> ситуации -- network запускается после (After) udev-settle. Но он его не
> _требует_ (Wants/Requires).
>
> Это значит, что если udev-settle запускается -- надо запускать network
> после него. Но если udev-settle никому не нужен -- то не надо пытаться его
> запускать.
>
> Раньше из-за сервиса, сохраняющего dmesg, udev-settle стартовал всегда. А
> вот теперь он стартует мягко скажем далеко не всегда. И тогда некому
> потребовать, чтобы network запускался после local-fs.target.
>
> Все это выглядит очень запутанным на первый взгляд, для осознания нужно
> четко понять три идеи:
>
> 1. Wants/Requires указывают _зависимости_, After/Before -- сортировку. Это
> ортогональные понятия.
>
> 2. enable/disable исключительно создают симлинки следуя командам в секции
> Install у сервиса.
>
> 3. сервис запускается _только_ если на него есть wants/requires
> зависимость от сервиса, который запускается. Единственный юнит, который
> всегда запускается при старте -- default.target. Остальное только если
> оказывается в дереве зависимостей.
>
> Спасибо за подробное описание работы.

-- 
LRU: #407670
----------- следующая часть -----------
Вложение в формате HTML было удалено...
URL: <http://lists.altlinux.org/pipermail/sisyphus/attachments/20140822/70841882/attachment-0001.html>


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