Systemd espera que a interface de rede esteja ativa antes de executar o serviço

2

Eu tenho algumas perguntas sobre o systemd. Estou tendo problemas para conseguir que meu script seja executado assim que a interface de rede estiver ativa. Eu tentei Requer e depois como visto abaixo, mas é inconsistente com a espera para a rede estar ativa. Estou usando o serviço certo e implementando-o corretamente? Para passar isso agora eu estou executando um loop de verificação de ping que é muito ineficiente e hackish. Qualquer conselho seria ótimo. Obrigado!

[Unit]
Description=PBU installer
Requires=network-online.service
After=network-online.service

[Service]
Type=oneshot
ExecStart=/home/pbu/current/scripts/pbu-unpack.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
    
por sphchow 27.01.2016 / 01:57

4 respostas

3

Eu resolvi esse problema observando a saída de:

systemctl list-units --no-pager

Isso me mostrou muitas unidades que eu não esperava, como todos os dispositivos de rede!

sys-devices-virtual-net-lan0.device loaded active plugged   /sys/devices/virtual/net/lan

Então eu adicionei

BindsTo=sys-devices-virtual-net-lan0.device
After=sys-devices-virtual-net-lan0.device

ao meu arquivo de serviço de unidade e, em seguida, meu serviço não foi iniciado até que o lan0 estivesse disponível.

    
por 17.01.2018 / 20:52
2

Isso parece estar incorreto. O nome correto é network-online.target . network-online.service não existe (testado no Fedora 26).

link

    
por 20.07.2017 / 20:33
0

Eu não sei especificamente sobre o systemd, mas se você estiver usando o NetworkManager, você pode usar nm-online no topo do seu script para esperar até que a rede esteja ativa.

if nm-online; then 
    echo "Online"
    # do my stuff
else
    echo "Network error"
fi

Por padrão, ele esperará 30 segundos para que uma conexão de rede se torne ativa e retorne 0 (true) se isso acontecer, caso contrário, false.

Isso é pelo menos melhor que o ping, eu acho.

    
por 27.01.2016 / 04:13
0

Você já tentou incluir Requires=network-online.target ? Ambas as minhas instalações Arch e CentOS possuem esse destino por padrão. Como é um alvo, indica que o sistema atingiu um marco específico no processo de inicialização, em vez de apenas um único serviço sendo iniciado. Se isso não acontecer, tente compará-lo com outra unidade de serviço que você sabe que requer uma conexão de rede.

    
por 27.01.2016 / 04:29