Фон
Я пишу простой скрипт для запуска в 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
Эффект
Служба работает как и ожидалось. Однако я заметил, что когда я запускаю putty на своем настольном компьютере сразу после включения светодиода, приглашение на вход не появляется немедленно. Поэтому я проверил с помощью
$ systemd-analyze plot > output.svg
Результат показывает
Вопрос
Похоже, мои службы начинаются не после network-online.target
, в чем проблема и как это исправить?
решение1
Когда возникает вопрос о директиве systemd, вы можете использовать , man systemd.directives
чтобы найти, где она задокументирована. В этом случае он показывает, что After=
задокументирована в man systemd.unit
.
В этом файле показано, что After=
директива указана в разделе «[UNIT] SECTION OPTIONS», что указывает на ее принадлежность к [Unit]
разделу файла.
В этой же документации описаны параметры раздела [INSTALL], но After=
они там не указаны.
Короче говоря, ваша After=
директива находилась в неправильном месте в файле модуля, поэтому она не имела никакого эффекта, пока вы не переместили ее в правильное место.
решение2
Исправьте это, изменив службу следующим образом:
[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
Все еще не до конца понял, что я делаю, но теперь это работает. Может кто-нибудь объяснить?
Обновлять
Этот ответ был создан мной до того, как появился принятый ответ.