Como executar um executável com o systemd antes do NetworkManager shutsdown

4

Estou tentando executar um executável, logo antes do desligamento, que precisa do NetworkManager em execução. Aqui está o arquivo de serviço que eu tenho atualmente (localizado em / lib / systemd / system), e funciona bem se eu tiver uma conexão ethernet, mas não funciona se eu tiver apenas uma conexão sem fio:

[Unit]
Requires=network.target
Requires=NetworkManager.service
Before=shutdown.target
After=network.target NetworkManager.service

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=MyShutdownExecutable

[Install]
wantedBy=multi-user.target

Isso está sendo executado em um dispositivo embarcado e, às vezes, o usuário terá uma conexão ethernet, às vezes apenas uma conexão sem fio, às vezes ambas - portanto, isso precisa funcionar com todas essas combinações de conectividade de rede.

Em um ponto do meu teste, durante o desligamento, vi uma mensagem dizendo que o NetworkManager estava desligado antes de meu executável ser executado. Fiquei com a impressão de que ter After = NetworkManager.service no meu arquivo de serviço deve garantir que o NetworkManager não deve ser desligado até que meu executável termine - o que parece ser o caso quando eu tenho uma conexão ethernet.

Qualquer ajuda seria muito apreciada.

    
por Rocky 06.01.2016 / 19:51

1 resposta

3

Você pode tentar isso como seu arquivo de serviço.

[Unit]
After=wpa_supplicant.service dbus.service NetworkManager.service
Requires=wpa_supplicant.service dbus.service NetworkManager.service

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=MyShutdownExecutable

[Install]
WantedBy=multi-user.target

Eu consegui executar meu script com isso - a conexão sem fio estava sendo destruída pelo suplicante wpa e pelo dbus, mesmo que o NetworkManager ainda estivesse em execução.

    
por 17.01.2016 / 22:02