LINUX.ORG.RU

systemd и сеть. Как попасть на момент, когда сеть уже работает?

 , ,


2

1

Есть самописный юнить, в который написал:

[Unit]
Description=service
After=network.target network-online.target
Requires=network.target network-online.target

А при запуске он всё равно жалуется, что сети нет. По логам стартует до поднятия сетевого интерфейса.

Где я дурак? Куда нажать, чтобы починить?

★★★★★

Чем у тебя запускается сеть?

network.target и network-online.target сами по себе ничего не значат, нужно добавить к ним в зависимости те юниты, которые будут непосредственно поднимать сеть и ждать её поднятия (соответственно).

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Ну нетворкменеджеров не ставил. Обычная установка Debian 8.3.

Хотя по логам юнит стартует моментально после network-online.target. Прям секунда в секунду.

А вот pid-файл /run/dhclient.eth0.pid создан заметно позже.

Radjah ★★★★★
() автор топика
Последнее исправление: Radjah (всего исправлений: 1)
Ответ на: комментарий от Radjah

Перечитай мой комментарий ещё раз. Разумеется, твой юнит будет стартовать после n-o.target, потому что ты так написал, только вот n-o.target никак не связан с событием поднятия сети.

Если ты пользуешься «традиционными» для Debian сетевыми скриптами — то там нет того, что ты хочешь. Переходи на NM или systemd-networkd.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)

А зачем тебе именно systemd? Запрещаешь сервису автостарт. В ifup - команду старта всего что нужно. В ifdown - останов.

ioway
()
Ответ на: комментарий от intelfx

Я в этом деле пока только разбираюсь. Хочется, чтобы по феншую было. :)

Про systemd-networkd почитаю.

Radjah ★★★★★
() автор топика
Ответ на: комментарий от Radjah

Там вон выше привели пример скрипта, который реализует логику network-online на традиционных дебиановских скриптах. Тоже можно заюзать.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Я вот еще вот такое нашел. https://www.joachim-breitner.de/blog/664-Switching_to_systemd-networkd

Если я правильно понял, то мне надо выключить ifup@eth0.service, создать network-файл и включить systemd-networkd с systemd-networkd-wait-online.

Первый поднимет сеть, второй отложит запуск зависимого от network-online.target

[Unit]
...
After=systemd-networkd.service
Before=network-online.target
Radjah ★★★★★
() автор топика

Гуглить по словам

[Unit] After=NetworkManager-wait-online.service

systemctl enable NetworkManager-wait-online.service

Jurik_Phys ★★★★★
()
Ответ на: комментарий от intelfx

Wants=network-online.target

Запускать, если всё перечисленное отработало нормально?

Radjah ★★★★★
() автор топика
Ответ на: комментарий от intelfx

Похоже, что всё заработало. :)

Сделал diasble networking, потом замутил /etc/systemd/network/eth.network с вот таким содержанием:

[Match]
Name=eth*
[Network]
DHCP=yes

Включил systemd-networkd и systemd-networkd-wait-online, прописал Wants в самопальные юниты.

После ребута сеть поднялась, сервисы поднялись без ошибок сети.

Спасибо за наводку на systemd-networkd!

Radjah ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.