LINUX.ORG.RU
ФорумAdmin

Как в systemd гарантировано запустить свой скрипт после запуска systemd-networkd?

 ,


0

1

У меня немного усложненная схема домашней сети, и всех возможностей в systemd-networkd пока не хватает, чтобы настраивать только им.

Поэтому нужно запустить скрипт гарантированно сразу после systemd-networkd, чтобы все сервисы, которые зависят от сети, стартовали уже после выполнения моего скрипта.

Как лучше это сделать?

Ответ на: комментарий от pedobear

Извини, события в моей стране выбили меня из колеи на долгое время, и пришлось временно изменить приоритеты. Но я ещё не отказался от затеи.

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

После systemd-networkd. Скрипту нужны уже сконфигурированные интерфейсы.

У меня недопонимание - что подразумевается под «поднятием сети»? Детект поднятия физического линка? Или _полное_ завершение конфигурирования systemd-networkd?

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

Ключевой вопрос: после systemd-networkd или после поднятия сети?

Насколько я понял, ТС хочет «доподнять» сеть своим скриптом, делая в нем то, что не может сделать systemd-networkd. Так что просто дождаться network-online.target не выйдет.

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

Запуск systemd-networkd сам по себе ещё ничего не означает. При этом есть тулза systemd-networkd-wait-online (ман), которая чего-там ждёт.

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

Wait-online как раз ждёт конфигурирования всего + физического линка хоть где-нибудь.

Действительно (глянул в ман). Кстати, Chaser_Andrey, а что собственно делает твой скрипт? А то может достаточно подождать появления lo.

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

Насколько я понял, ТС хочет «доподнять» сеть своим скриптом, делая в нем то, что не может сделать systemd-networkd.

Именно. Добавление маршрутизации, правил для iptables, шейпинга, qos, а также работа через несколько аплинков.

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

Тогда так. Втыкаем настраивающий юнит между systemd-network-wait-online.service и network-online.target. Обратные действия можно вписать в него же, в ExecStop=.

[Unit]
Description=Post-configure the network
Wants=systemd-networkd-wait-online.service
After=systemd-networkd-wait-online.service network.target

[Service]
Type=oneshot
RemainAfterExit=yes
...

[Install]
WantedBy=network-online.target # потом systemctl enable <юнит>

Ну и, соответственно,

[Unit]
Wants=network-online.target
After=network-online.target
во все юниты, которые должны стартовать после поднятия сети.

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

Спасибо, выглядит нормально, разве что необходимость править сторонние юниты... я же могу просто добавить нужные ключи в service-файлы в /etc/systemd, а не перезаписывать в /usr/lib/systemd?

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

Вообще говоря, юниты, которым нужна непременно поднятая сеть, должны сами иметь эти зависимости. Если же их нет (и systemd достаточно новый), можно добавить эти параметры (и только их) в /etc/systemd/system/foo.service.d/bar.conf.

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

Я так думаю, что если эти зависимости отсутствуют - то стоит слать баг-репорт с тривиальным патчем.

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

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

Я юзаю 217, там добавили метрики маршрутов после моего багрепорта ^_^

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