1

Я использую systemd для запуска сценария службы мониторинга WiFi и питания, который сканирует SSID, вызывает сеть и туннель SSH и выполняет несколько других задач.

К моему большому удивлению, это не всегда работает при холодной загрузке (но работает при горячей загрузке). Начальное "ifconfig mlan0 up" не выполняется. Похоже, это связано с состоянием гонки с зависимостью от сокетов:

root@duovero:~# systemctl status wifipwrmon
....

Jan 01 00:00:08 duovero wifipwrmon.sh[415]: ifconfig: SIOCGIFFLAGS: No such ...e
Jan 01 00:00:17 duovero wifipwrmon.sh[415]: Searching for WiFi routers

Это несколько надуманный пример, потому что я могу просто переиздать ifconfig. Но у меня также есть другой сервис, который зависит от сокетов для IPC. Это полностью терпит неудачу при загрузке, если я не помещаю длинную задержку в прежде, чем я начну это.

Вот что я использую для wifipwrmon.service:

[Unit]
Description=WiFi power monitor service
Requires=getty@tty1.service
After=getty@tty1.service

[Service]
ExecStart=/home/root/i2c/monitor/wifipwrmon.sh

[Install]
WantedBy=multi-user.target

Я признаю, что я привык к sysvinit, и я новичок в systemd, и у меня было мало времени, когда я это сделал. Поскольку я хотел, чтобы это началось довольно поздно, я установил зависимость от запуска getty (вероятно, новичка).

Может кто-нибудь сказать мне, что зависимость должна быть для запуска службы, которая зависит от сокетной связи? Я был очень удивлен, что это вообще не удалось - я думал, что сокеты настолько важны, что это будет в ядре.

1 ответ1

0

Насколько я понимаю, проблема не связана с сокетами, но связана с инициализацией устройства.

При запуске службы systemd и инициализации устройства запустите в paralel. Что происходит в вашем случае, так это то, что при холодной загрузке ваше Wi-Fi-устройство требует больше времени для инициализации, и ваша служба запускается до того, как она станет доступной, что приводит к сбою ifconfig

Вы можете использовать что-то вроде:

[Unit]
BindTo=sys-subsystem-net-devices-wlan0.device
After=sys-subsystem-net-devices-wlan0.device

в вашем сервисном файле, чтобы заказать устройство после появления беспроводного устройства.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .