systemd: soketlere bağlı servis başlatma


1

Bir SSID'yi tarayan, ağı ve SSH tünelini açan ve birkaç başka iş yapan bir WiFi ve güç izleme servisi komut dosyası başlatmak için systemd kullanıyorum.

Benim açımdan çok, her zaman soğuk açılışta işe yaramaz (ancak ılık botta çalışır). İlk "ifconfig mlan0 up" başarısız olur. Bu, soketlere bağımlı olan bir yarış durumu ile bağlantılı görünüyor:

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

Bu biraz tartışmalı bir örnek çünkü ifconfig'i yeniden gönderebilirim. Ancak IPC için yuvaya bağlı başka bir servisim de var. Başlamadan önce uzun bir gecikme yaşamadıkça bu tamamen önyüklemede başarısız oluyor.

Wifipwrmon.service için kullandığım şey:

[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'e alışkın olduğumu ve systemd'de yeniyim ve bunu yaptığımda zamanın yetersiz olduğunu itiraf ediyorum. Oldukça geç başlamasını istediğim için getty başlangıcına bir bağımlılık koydum (muhtemelen yeni başlayanlar için bir şey).

Birisi bana soket iletişimine bağlı bir servisi başlatmak için bağımlılığın ne olduğunu söyleyebilir mi? Hiç başarısız olmadığına çok şaşırdım - soketlerin çekirdeğin içinde olacağı kadar kritik olduğunu düşündüm.


Biraz hack ama hızlı bir "wait_for_sane_socket.sh" betiği etrafında dönen bir hata döndürmemek için "ifconfig mlan0> / dev / null" bekliyorum (genel durumda "ifconfig lo" çalışacağından eminim). Bu düzeltiyor ama yine de çok garip.
carveone

İfconfig yerine netctl kullanamaz mısınız? Systemd ile daha iyi bütünleşeceğini düşünmüştüm. Doğru After=network.targetanlarsam , bir bağımlılık hizmetin ancak netctl işini bitirdikten sonra başladığından emin olur. Sorunuzu gerçekten cevaplamıyor, ama belki denemek için bir yön.
bonob

Yanıtlar:


0

Anladığım kadarıyla sorun soketlerle ilgili değil, cihazın başlatılmasıyla ilgili.

Sistem servisinde başlatma ve cihaz başlatma paralel olarak çalışır. Sizin durumunuzda, soğuk açılışta wifi cihazınızın başlatılması daha uzun sürüyor ve hizmetiniz kullanıma sunulmadan önce başlıyor ve ifconfig başarısız oluyor.

Gibi bir şey kullanabilirsiniz:

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

Servis dosyanızda, birimin kablosuz cihazın görünmesinden sonra sipariş etmek için.


Bu durumda böyle düşünmüyorum. WiFi'ye ihtiyacım yok, prizler tamamen localhost'ta işleniyor. Sorun şu ki, ağ katmanının giriş sırasında geçerli olacağını varsaydım. Ve test ettiğimde oldu ama müşterilerin önünde değil (mutlak kör panik işareti). Sorunu, başka bir şey yapmadan önce arayüzleri yeniden deneyen ve ardından sisteme bağlı olarak komut dosyalarını karıştırarak çözdük. Gibi bir şey: "After = network.target checknetup.service".
carveone
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.