Подождите, пока 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
может быть уловка.