Systemd: як змусити запустити систему systemd після того, як мережа повністю підключена?


12

Фон

Я пишу простий сценарій для запуску в Raspbain на Raspberry Pi 2, простий увімкніть світлодіод, щоб вказати, що я готовий зв’язатися з SSH зі свого настільного комп'ютера.

Сценарій тут не важливий, лише зазначимо, що, коли я використовую контроль частоти, щоб сценарій працює нескінченним циклом, часто включати та вимикати світлодіод. Отже, це приклад простого обслуговування. Однак принаймні прийнята відповідь на це питання радить мені встановити тип простою. Так виглядає мій сервісний файл

[Unit]
Description=Turn on LED after SSH is ready

[Service]
Type=idle
ExecStart=/usr/bin/sshready.py

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

Ефект

Послуга працює як очікувалося. Однак я помітив, коли я запускаю шпаклівку на своєму настільному комп’ютері відразу після того, як світлодіод увімкне, запит на вхід не з’явиться негайно. Так я перевірив

$ systemd-analyze plot > output.svg

Результат показує

введіть тут опис зображення

Питання

Схоже, мої послуги починаються не після того network-online.target, що тут не так і як це можна виправити?

Відповіді:


12

Коли виникає запитання про системну директиву, ви можете man systemd.directivesзнайти, де це документально підтверджено. У цьому випадку видно, що After=це зафіксовано в man systemd.unit.

У цьому файлі видно, що After=директива вказана у розділі "[UNIT] SECTION OPTIONS", вказуючи, що вона належить до [Unit]розділу файлу.

Ця ж документація також документує параметри розділу [ВСТАНОВИТИ] і After=там не вказана.

Коротше кажучи, ваша After=директива знаходилась у неправильному розташуванні файлу одиниці, тому вона не мала ефекту, поки ви не перемістили її в правильне місце.


Щоб було зрозуміло, у цьому випадку "[Unit]" є "[Service]", оскільки це сервісний файл.
faho

Відповідь, що підлягає копії, з виправленнями була б набагато кращою!
GerardJP

@GerardJP Краще навчити чоловіка ловити рибу, а потім годувати його протягом дня. Як тільки люди знають, як використовувати системну документацію, вони можуть знайти авторитетні відповіді, не витрачаючи часу на StackExchange, переглядаючи сторонні документи.
Марк Стосберг

11

Виправте це, змінивши службу як

[Unit]
Description=Turn on LED after SSH is ready
After=network-online.target

[Service]
Type=idle
ExecStart=/usr/bin/sshready.py

[Install]
WantedBy=network-online.target

Ще не до кінця зрозумів, що я роблю, але це працює зараз. Може хто-небудь пояснить, будь ласка

Оновлення

Цю відповідь створив я ще до того, як прийде прийнята відповідь.


Що After=директива повинна бути в [Unit]розділі. Це просто так.
Біґон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.