como iniciar um serviço systemd antes de iniciar a rede?

10

Estou tentando configurar um novo serviço (sob o Debian Jessie) que precisa configurar algumas montagens onde a configuração da rede é armazenada e, portanto, este serviço deve ser concluído antes do início do networking.service.

Eu tentei o seguinte:

[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

Usando systemd-analyze plot , posso ver que meu serviço é iniciado, mas networking.service começa cerca de três segundos antes:

Aparentementeminhaconfiguraçãoestáerrada,masestoutendodificuldadesparaencontraroproblema...Qualquerajudamuitoapreciada..

Atualizar

Nomomento,resolviissoalterandoaconfiguraçãodoserviçoparainiciarantesdelocal-fs.targetemvezdenetworking.service:

[Unit]DefaultDependencies=noDescription=mount/repairremainingfilesystems(allpersistentfsbeyond"/")
Before=local-fs.target

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

[Install]
RequiredBy=local-fs.target

Ainda assim, gostaria de entender por que minha primeira configuração não funcionou como esperado ...?

    
por Udo G 11.09.2015 / 14:58

4 respostas

6

network-pre.target is a target that may be used to order services before any network interface is configured. It's primary purpose is for usage with firewall services that want to establish a firewall before any network interface is up. It's a passive unit: you cannot start it directly and it is not pulled in by the the network management service, but by the service that wants to run before it.

Você deseja usar network-pre.target se quiser configurar algo antes do início da rede

Services that want to be run before the network is configured should place Before=network-pre.target and also set Wants=network-pre.target to pull it in.

Você deve colocá-los abaixo da seção [Unit] :

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

Referência

    
por 31.10.2015 / 16:40
1

Como feito no Debian Jessie, o pacote netfilter-persistent (permitindo carregar as regras do iptables antes que a rede esteja ativa) tem um netfilter-persistent.service que se parece com:

# 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
    
por 29.03.2017 / 17:19
0

O erro é simples e uma das principais coisas que eu sempre misturo: você mistura Before e RequiredBy . Isso não vai junto. Os outros estão corretos sobre o alvo.

    
por 18.09.2017 / 23:09
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

Fazer algo ao longo destas linhas garantirá que esta unidade tenha sido executada antes da rede, mas após a maioria das outras configurações importantes ter ocorrido.

    
por 24.01.2018 / 16:58

Tags