Como forçar network.target a aguardar o DHCP com systemd-networkd?

5

Estou usando o systemd-networkd para configurar minhas interfaces:

[Match]
Name=enp3s0

[Network]
DHCP=v4 

Funciona muito bem, exceto que na inicialização, alguns serviços não estão aguardando a conclusão do DHCP. Para instâncias, meus diretórios montados pelo NFS e nginx falham porque não há rede no momento em que eles são inicializados.

Existe uma maneira de forçar o network.target a esperar pelo DHCP?

Nota do editor. De acordo com a documentação :

Many network management solutions provide a way to unconditionally pull in network-online.target, and thus upgrading the effect of network.target to the effect of network-online.target.

If you use systemd-networkd you can do this by enabling systemd-networkd-wait-online.service:

systemctl enable systemd-networkd-wait-online.service

No entanto, tentei isso e não fez serviços dependendo de network.target aguardar pelo DHCP. Ele apenas tornou os serviços que dependem explicitamente de network-online.target aguardar pelo DHCP e, de fato, é necessário fazer esse trabalho.

    
por Baptiste Wicht 25.09.2014 / 19:24

2 respostas

3

Ao usar o systemd-networkd, certifique-se de que todas as interfaces estejam ativas e tenham um endereço IP atribuído:

systemctl enable systemd-networkd-wait-online.service

Alguém pode estar usando o NetworkManager, caso em que seria:

systemctl enable NetworkManager-wait-online.service

Veja: link

    
por 06.10.2014 / 10:57
0

Eu não usei systemd-networkd especificamente antes, mas systemd definitivamente deve ser capaz de resolver isso ajustando o arquivo systemd service que systemd-networkd usa.

Encontrando arquivo de serviço

Se você executar:

systemctl status systemd-networkd

Você deve obter uma saída semelhante a essa (usando systemd-modules-load.service como exemplo, porque não tenho systemd-networkd ):

systemd-modules-load.service - Load Kernel Modules
Loaded: loaded (/usr/lib/systemd/system/systemd-modules-load.service; static)
Active: failed (Result: exit-code) since So 2013-08-25 11:48:13 CEST; 32s ago
 Docs: man:systemd-modules-load.service(8).
       man:modules-load.d(5)
Process: 15630 ExecStart=/usr/lib/systemd/systemd-modules-load (code=exited, status=1/FAILURE)

A segunda linha informa a localização do arquivo de serviço (no exemplo é /usr/lib/systemd/system/systemd-modules-load.service ). O arquivo de serviço determina quando na hierarquia systemd as coisas devem ser iniciadas.

Modificando arquivo de serviço

Se você abrir este arquivo em um editor de texto, há três seções muito importantes:

  • [Unit]

  • [Service]

  • [Install]

A seção [Unit] pode conter as diretivas After e Requires . After força o serviço a iniciar depois de outro systemd unidade, Requires força outra unidade systemd a ser iniciada se ela ainda não estiver ativada (mas não forçar uma ordenação).

Portanto, se você localizar o arquivo systemd-networkd service, determine qual unidade deseja que systemd-networkd inicie depois e adicione à seção [Unit] a ser definida:

[Unit]
...
Requires=[unit name]
After=[unit name]

Com este método, você pode forçar o serviço systemd-networkd a iniciar após qualquer outra unidade.

Outras preocupações

Você diz que suas montagens de rede falham, se você estiver montando o via /etc/fstab suas entradas contêm a opção _netdev ?

    
por 06.10.2016 / 22:20