Есть ли способ настроить службу systemd (например, serviceX), чтобы дождаться, когда служба connmand завершит настройку сетевых интерфейсов до запуска serviceX? Из того, что я понимаю в systemd, используя или полагаясь на network.target, бессмысленно, потому что эта функциональность ужасно нарушена. Система, которую я использую (BeagleBone Black с Angstrom Linux), использует connman, а не NetworkManager.Подождите, пока connman завершит настройку сети в системе sytemd
ответ
Wants=network.target network-online.target
и After=network.target network-online.target
кажется недостаточным для Angstrom на BeagleBone Black на момент написания этой статьи. Я также должен был добавить connman.service
в Wants=
, чтобы все работало правильно.
Следуя инструкции here, я обнаружил, что эта линия (в секции [Unit] файл .Service) работала для меня:
Wants=network-online.target #wait for network up. Can slow down script.
Я применил это исправление для целей, описанных, чтобы получить opkg upgrade
работая правильно, что он делает сейчас. Я думаю, использование network-online
вместо network
может быть фокусом.
Это не сработает, потому что Wants не влияет на порядок. –
Чтобы быть более понятным, это само по себе (1) обычно не решает проблему и (2) комментарий после того, как директива неверна. –
Согласно Systemd документации, все Systemd блоки, которые должны ждать рабочего онлайн подключение во время загрузки должны включать в себя следующее:
[Unit]
...
Wants=network-online.target
After=network-online.target
Если вы хотите, чтобы быть совместимым с более старыми Systemd версиями, вы можете также используют:
[Unit]
...
Wants=network.target network-online.target
After=network.target network-online.target
Это для системыd. С NetworkManager (для полноты я знаю, что вы его не используете), это работает с восходящими версиями 0.9.10, а некоторые дистрибутивы, включая Fedora, также работали со старыми версиями предыдущих версий.
https://bugzilla.gnome.org/show_bug.cgi?id=728965
Как вы используете Connman вместо этого, вам нужно проверить, реализует ли Connman network-online.target
правильно. Проверка исходного кода connander 1.30 не обнаруживает внешний вид network-online.target
, поэтому я должен предположить, что connman отстает. Возможно, вам захочется запустить запрос функции в 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
.
Ваш ответ не помог решить мою проблему, но он дает полезную информацию, поэтому спасибо. –
Как я все еще вижу активность в этом вопросе, обновленную по отношению к текущей ситуации. –
- 1. Подождите, пока метод не завершит вызов метода
- 2. Подождите, пока деинсталлятор завершит работу с пакетом
- 3. Подождите, пока пользователь завершит взаимодействие с UITableView
- 4. Подождите, пока WMIC завершит удаленный вызов
- 5. Подождите, пока метод jQuery .html завершит рендеринг
- 6. Подождите, пока компонент React не завершит обновление
- 7. Подождите, пока AsyncTask завершит выполнение сценария
- 8. COM Interop - Подождите, пока Excel завершит работу
- 9. Подождите, пока модуль ModuleCatalog завершит загрузку модуля
- 10. Loopback и mocha: подождите, пока сервер завершит загрузку сценариев
- 11. Подождите, пока jPlayer завершит загрузку файлов до продолжения цикла
- 12. Подождите, пока модуль CasperJS завершит выполнение перед возвратом значения?
- 13. Подождите, пока провайдер завершит работу до ввода состояния
- 14. Подождите, пока параллельный удаленный процесс завершит bash ssh
- 15. Подождите, пока httpRequests не завершит передачу ответа - ParseServer
- 16. Подождите, пока пользователь не завершит ввод с помощью ngChange - AngularJS
- 17. Подождите, пока приложение приложения JavaFX Thread завершит обработку событий?
- 18. Подождите, пока MediaScanner сканирует файл
- 19. Подождите, пока [NSAlert beginSheetModalForWindow: ...];
- 20. Подождите, пока запрос выполняется
- 21. Подождите, пока пользовательское разрешение
- 22. Подождите, пока не закончите?
- 23. Подождите, пока «Записать полностью»
- 24. Подождите, пока fs.readFileSync делается
- 25. Подождите, пока AlertDialog покажет
- 26. Подождите, пока NSURLSessionDataTask вернется
- 27. Подождите, пока ExecWB закончит
- 28. Подождите, пока переменная изменится
- 29. Подождите, пока выйдет замок.
- 30. Подождите, пока addClass выполнит
Вы уверены, что это правильный путь. На мой взгляд, если вы используете * connman, то у вас есть connman.service * enabled *, и поэтому вам не нужно 'Wants = connman.service' в любой из сервисов, которые зависят от сети. Посмотрите примеры тестирования в билете NM bugzilla, который я связал. Также было бы неплохо, если бы вы могли затронуть эту проблему с помощью средства отчетности об ошибках распространения. –
Кстати, что в вашем 'connman.service'? –
Нет, я не уверен, что это путь, но он работает, и у меня нет времени задерживаться на этом и исследовать его дальше, так как у меня есть другие проекты, которые нужно сделать. Ниже приводится содержание моего connman.service файла: [Unit] Описание = Служба подключения После = syslog.target [Service] Type = DBus BusName = net.connman ExecStart =/USR/SBIN/connmand -n [Установить] WantedBy = multi-user.target –