Я использую 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 (вероятно, новичка).
Может кто-нибудь сказать мне, что зависимость должна быть для запуска службы, которая зависит от сокетной связи? Я был очень удивлен, что это вообще не удалось - я думал, что сокеты настолько важны, что это будет в ядре.