Debian systemd network-online.target не работает?

Итак, я пытаюсь сделать службу systemd на Debian Jessie. Мне нужно, чтобы он начинался после достижения network-online.target .

Проблема заключается в том, что network-online.target срабатывает одновременно с network.target и в то время мои интерфейсы еще не настроены, просто начался запрос DHCP.

Это похоже на проблему, характерную для Debian, поскольку она использует устаревшую конфигурацию сети.

Как обойти эту проблему или как заставить network-online.target работать?

Поскольку вы используете /etc/network/interfaces , вам понадобится служба systemd для контроля состояния каждого интерфейса. Проверьте, есть ли у вас /lib/systemd/system/ifup-wait-all-auto.service (установленный пакетом ifupdown в Ubuntu 15.04). Если нет, создайте /etc/systemd/system/ifup-wait-all-auto.service и вставьте следующее:

 [Unit] Description=Wait for all "auto" /etc/network/interfaces to be up for network-online.target Documentation=man:interfaces(5) man:ifup(8) DefaultDependencies=no After=local-fs.target Before=network-online.target [Service] Type=oneshot RemainAfterExit=yes TimeoutStartSec=2min ExecStart=/bin/sh -ec '\ for i in $(ifquery --list --exclude lo --allow auto); do INTERFACES="$INTERFACES$i "; done; \ [ -n "$INTERFACES" ] || exit 0; \ while ! ifquery --state $INTERFACES >/dev/null; do sleep 1; done; \ for i in $INTERFACES; do while [ -e /run/network/ifup-$i.pid ]; do sleep 0.2; done; done' [Install] WantedBy=network-online.target того, как [Unit] Description=Wait for all "auto" /etc/network/interfaces to be up for network-online.target Documentation=man:interfaces(5) man:ifup(8) DefaultDependencies=no After=local-fs.target Before=network-online.target [Service] Type=oneshot RemainAfterExit=yes TimeoutStartSec=2min ExecStart=/bin/sh -ec '\ for i in $(ifquery --list --exclude lo --allow auto); do INTERFACES="$INTERFACES$i "; done; \ [ -n "$INTERFACES" ] || exit 0; \ while ! ifquery --state $INTERFACES >/dev/null; do sleep 1; done; \ for i in $INTERFACES; do while [ -e /run/network/ifup-$i.pid ]; do sleep 0.2; done; done' [Install] WantedBy=network-online.target 

Это служебный файл, присутствующий в системе Ubuntu 15.04, но с добавленным секцией [Install] чтобы сделать вещи немного проще. Я надеюсь, что поведение ifup в Ubuntu 15.04 будет таким же, как поведение ifup в Debian Jessie. Если нет, потребуется какая-то модификация (особенно с последней строкой).

Затем запустите sudo systemctl enable ifup-wait-all-auto.service . После перезагрузки компьютера вы увидите, что network-online.target достигается после того, как интерфейсы будут подняты (по крайней мере).

Внимание! Просто вычислил его на Raspbian Jessie: удалите ВСЕ прокомментированные строки в интерфейсах / etc / network, и это сработает! Кажется, это ошибка синтаксического анализа =) В моем конкретном случае я оставил комментарий iface eth0 inet dhcp и просто забыл об этом несколько лет назад, но после обновления до Raspbian Jessie и восстановления ядра у меня очень странное поведение: оно использовалось DHCP и отказался выполнить настройку из / etc / network / interfaces. Поэтому я лишил его комментариев – только рабочие строки, перезагрузка – и это работает! НЕТ НЕОБХОДИМОГО ПАРТИИ / РЕДАКТИРОВАНИЕМ СКРИПТА!