ağ başlamadan önce bir systemd hizmeti nasıl başlatılır?


11

Ağ yapılandırmasının depolandığı bazı bağlar kurması gereken yeni bir hizmet (Debian Jessie altında) kurmaya çalışıyorum ve bu hizmet networking.service başlamadan önce tamamlanmalıdır .

Aşağıdakileri denedim:

[Unit]
Description=mount/repair remaining filesystems (all persistent fs beyond "/")
#Before=network-pre.target
Before=networking.service

[Service]
Type=oneshot
ExecStart=/opt/intermodul-mounts/start.sh
TimeoutSec=0
RemainAfterExit=yes

[Install]
RequiredBy=networking.service

Kullanarak systemd-analyze plothizmetimin başladığını, ancak networking.serviceyaklaşık 3 saniye önce başladığını görebiliyorum :

resim açıklamasını buraya girin

Görünüşe göre benim yapılandırma yanlış, ama sorunu bulmakta zorlanıyorum ... Herhangi bir yardım büyük takdir ..

Güncelleme

Şu anda local-fs.targetbunun yerine daha önce başlatmak için hizmet yapılandırmasını değiştirerek çözdüm networking.service:

[Unit]
DefaultDependencies=no
Description=mount/repair remaining filesystems (all persistent fs beyond "/")
Before=local-fs.target

[Service]
Type=oneshot
ExecStart=/opt/intermodul-mounts/start.sh
TimeoutSec=0
RemainAfterExit=yes

[Install]
RequiredBy=local-fs.target

Yine de, ilk yapılandırmamın neden beklendiği gibi çalışmadığını anlamak istiyorum ...?


Systemd'in çalışma şekli nedeniyle, işlerin yürütüldüğü gerçek geçici düzen önemli olmayabilir. Ağ iletişimi geldiğinde, bu dizindeki dosyalara göre başarılı mı?
Tom Hunt

Sorunu anladığımdan emin değilim. Her neyse, başka bir bölümde bulunan komut dosyalarına /etc/network/interfacesreferanslar var ip-up. Bu bölüm karmaşık komut dosyası tarafından monte edilir gerekir ağ kuruluyor önce çalıştırılabilir. Şu anda komut dosyaları etkin bir şekilde başlamıyor çünkü önyükleme sırasında erişilemiyor. Daha sonra çalıştırmak tüm arayüzleri doğru bir şekilde getirir. /opt/intermodul-mounts/start.ship-upservice networking restart
Udo G

Yanıtlar:


8

network-pre.target, herhangi bir ağ arabirimi yapılandırılmadan önce hizmet sipariş etmek için kullanılabilecek bir hedeftir. Birincil amacı, herhangi bir ağ arayüzü kalkmadan önce güvenlik duvarı oluşturmak isteyen güvenlik duvarı servisleriyle kullanım içindir. Pasif bir birimdir: doğrudan başlatamazsınız ve ağ yönetimi servisi tarafından değil, daha önce çalışmak isteyen servis tarafından çekilir.

network-pre.targetAğ başlamadan önce bir şey kurmak istiyorsanız kullanmak istiyorsunuz

Ağ yapılandırılmadan önce çalıştırılmak istenen hizmetler, önce = network-pre.target koymalı ve ayrıca Wants = network-pre.target komutunu içeri almalıdır.

Bunları [Unit]bölümün altına koymalısınız :

Before=network-pre.target
Wants=network-pre.target

Referans


1
Hey @edwardtorvalds, bazı ağ yapılandırma kurulumu için tam olarak bunu yapıyordum, ancak ünite asla çalışmıyor gibi görünüyor. Cevap systemctl is-enabled <unit>her zaman static. Tabii ki etkinleştiremiyorum çünkü yok WantedBy=. Sonuçta, ne istiyor? Bu, ağ yüklenmeden önce bazı kurulumları yapan bir şeydir.
deitch

= remote-fs.target veya mount-fs.target ile aranmayı deneyebilirsiniz.
Edward Torvalds

2
Teşekkürler. Yaptığım sona erdi Before=network-pre.targetve Wants=network-pre.targetve için [Install]yaptığımız WantedBy=network.target. Son bölüm ağ bağlantısıyla zorunlu kılmaya zorlandı, birincisi sıraya koydu. Yine de bir
acıydı

Kesinlikle kafanı benden çok daha iyi bulduğun için, sahip olduğum diğer q'ya bakabilir misin? unix.stackexchange.com/questions/277783/… Hala nasıl yapılacağını anlamaya çalışıyor.
deitch

Kafam karıştı çünkü şifrelenmiş bölümle ilgili deneyimim yok, eğer sadece beni yapabilirsen lütfen
Edward Torvalds

3

Debian Jessie'de yapıldığı gibi, netfilter-persistent paketinin (ağ açılmadan önce iptables kurallarının yüklenmesine izin veren) bir netfilter-persistent.service değeri vardır:

# https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/
# based on the netfilter-persistent package
[Unit]
Description=netfilter persistent configuration
DefaultDependencies=no

Before=network-pre.target
Wants=network-pre.target

Wants=systemd-modules-load.service local-fs.target
After=systemd-modules-load.service local-fs.target

Conflicts=shutdown.target
Before=shutdown.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/netfilter-persistent start
ExecStop=/usr/sbin/netfilter-persistent stop

[Install]
WantedBy=multi-user.target

Neden shutdown.target?
Alexis Wilke

1

Hata basit ve her zaman karıştırdığım ana şeylerden biri: Siz karıştırın Beforeve RequiredBy. Birlikte gitmiyor. Diğerleri hedef konusunda doğrudur.


0
[Unit]
Description=mount/repair remaining filesystems (all persistent fs beyond "/")
DefaultDependencies=no
After=sysinit.target local-fs.target
Before=basic.target

[Service]
Type=oneshot
ExecStart=/opt/intermodul-mounts/start.sh
TimeoutSec=0
RemainAfterExit=yes

[Install]
WantedBy=basic.target

Bu hatlar boyunca bir şey yapmak, bu ünitenin ağdan önce çalışmasını sağlar, ancak diğer önemli kurulumların çoğundan sonra gerçekleşir.

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.