Подождите, пока connman завершит настройку сети в системе sytemd

Есть ли способ настроить службу systemd (например, serviceX), чтобы дождаться, пока служба connmand завершит настройку сетевых интерфейсов до запуска serviceX? Исходя из того, что я понимаю в отношении systemd, использовать или полагаться на network.target бессмысленно, потому что эта функция ужасно нарушена. Используемая мной система (BeagleBone Black с Angstrom Linux) использует connman, а не NetworkManager.

3 ответа

Решение

Wants=network.target network-online.target а также After=network.target network-online.target на момент написания этой статьи для Angstrom на BeagleBone Black было недостаточно. Я также должен был добавить connman.service в Wants= чтобы все работало правильно.

Согласно документации systemd, все системные модули, которым нужно ожидать работающего онлайн-соединения во время загрузки, должны включать следующее:

[Unit]
...
Wants=network-online.target
After=network-online.target

Если вы хотите быть совместимым со старыми версиями systemd, вы также можете использовать:

[Unit]
...
Wants=network.target network-online.target
After=network.target network-online.target

Это для systemd. С NetworkManager (для полноты я знаю, что вы его не используете) это работает, поскольку вышестоящие версии 0.9.10 и некоторые дистрибутивы, включая Fedora, также работали со старыми вышестоящими версиями.

https://bugzilla.gnome.org/show_bug.cgi?id=728965

Поскольку вместо этого вы используете connman, вам нужно проверить, реализует ли connman network-online.target правильно. Проверка исходного кода connman 1.30 не обнаруживает появления network-online.target В общем, поэтому я должен предположить, что Коннман отстает. Возможно, вы захотите запустить запрос функции в connman и / или в вашем дистрибутиве Linux. В этом случае было бы неплохо, если бы вы добавили примечание об этом здесь.

В основном, с более новыми версиями systemd, сетевым сервисом, который правильно реализует network-online.target, и сервисами, использующими правильные зависимости, для пользователя все должно работать "из коробки".

Согласно комментарию к другому ответу, раздел блока connman.service выглядит следующим образом:

[Unit]
Description=Connection service
After=syslog.target

Там действительно должно быть в Before=network.target, по крайней мере. After=syslog.target избыточно с текущими версиями systemd. Но полная реализация network-online.target будет предпочтительным.

Следуя приведенным здесь инструкциям, я обнаружил, что эта строка (в разделе [Unit] файла.service) работает для меня:

Wants=network-online.target #wait for network up. Can slow down script.

Я применил это исправление для описанной цели, чтобы получить opkg upgrade работает правильно, что он и делает сейчас. Я думаю, используя network-online скорее, чем network может быть уловка.

Другие вопросы по тегам