Systemd: ağ tamamen bağlandıktan sonra bir systemd hizmetini nasıl başlatabilirim?


12

Arka fon

Raspberry Pi 2'de Raspbain'de çalışacak basit bir komut dosyası yazıyorum, masaüstü bilgisayarımdan SSH ile bağlanmaya hazır olduğumu belirtmek için basit bir LED açın.

Komut dosyası burada önemli değildir, sadece frekans kontrolünü kullandığım için komut dosyasının sonsuz bir döngü çalıştırdığından, LED'i sık sık açmak ve kapatmak için bahsetmek gerekir. Bu basit bir hizmet örneğidir. Ancak, en azından bu sorunun kabul edilen cevabı , türü boşta olarak ayarlamamı tavsiye ediyor. Hizmet dosyam şöyle görünüyor

[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

Etki

Hizmet beklendiği gibi çalışır. Ancak, LED'i açtıktan hemen sonra masaüstü bilgisayarımda macun başlattığımda fark edilmediğini fark ettim. Bu yüzden kontrol ettim

$ systemd-analyze plot > output.svg

Sonuç şunu gösterir:

resim açıklamasını buraya girin

Soru

Görünüşe göre hizmetlerim bundan sonra network-online.targetbaşlamıyor, burada yanlış olan nedir ve nasıl düzeltebilirim?

Yanıtlar:


12

Bir systemd yönergesi hakkında bir soru olduğunda, man systemd.directivesnerede belgelendiğini bulmak için kullanabilirsiniz . Bu durumda After=belgelenmiştir man systemd.unit.

Bu dosyada, After=direktifin "[BİRİM] BÖLÜM SEÇENEKLERİ" 'nde listelendiğini [Unit]ve dosyanın bölümüne ait olduğunu gösterir .

Aynı dokümantasyon [INSTALL] bölüm seçeneklerini de belgeler ve After=orada listelenmez.

Kısacası, After=direktifiniz birim dosyasının yanlış konumunda olduğundan doğru konuma taşınana kadar hiçbir etkisi olmamıştır.


Açık olmak gerekirse, bu durumda "[Birim]" bir hizmet dosyası olduğundan "[Hizmet]" dir.
faho

Düzeltmelerle kopyalanabilir bir cevap çok daha iyi olurdu!
GerardJP

@GerardJP Bir adama balık tutmayı öğretmek ve bir gün boyunca onu beslemek daha iyidir. İnsanlar systemd belgelerini nasıl kullanacaklarını öğrendikten sonra, üçüncü taraf belgelerine bakarak StackExchange üzerinde zaman harcamadan yetkili yanıtlar bulabilirler.
Mark Stosberg

11

Hizmeti şu şekilde değiştirerek düzelttirin:

[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

Hala ne yaptığımı tam olarak anlamadım, ama şimdi çalışıyor. Herkes açıklayabilir mi?

Güncelleme

Bu cevap, kabul edilen cevap gelmeden önce kendi başıma oluşturuldu.


Bu After=direktif olmalıdır [Unit]bölümünde. Sadece o.
Bigon
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.