Como escrever um arquivo de unidade de serviço do systemd para que ele aguarde até que uma interface específica esteja ativa antes de iniciar?

9

Eu estou tentando escrever um arquivo de unidade para o hostapd no Debian.

O daemon hostapd parece precisar que a interface para a interface Wifi associada esteja ativa antes de ser executada, ou então, de SEGV.

Eu tentei network-online.target, mas ainda assim recebo o SEGV. Eu acho que isso é porque o network-online.target só precisa ver QUALQUER interface, e outras interfaces aparecem antes que a interface Wifi esteja pronta o suficiente para o hostapd funcionar.

Qual é a melhor maneira de ter um serviço aguardando uma interface específica antes de iniciar?

    
por bigjosh 18.06.2015 / 18:18

1 resposta

10

Desde o systemd 219, você pode usar a ferramenta systemd-networkd-wait-online do systemd diretamente, com um --interface parâmetro para especificar a interface a ser esperada. Por exemplo:

ExecStartPre=/usr/lib/systemd/systemd-networkd-wait-online --interface=$IFACE

No entanto, há uma ressalva. Essa ferramenta precisa que systemd-networkd esteja em execução, mesmo que não faça nada na sua configuração. Por outro lado, começando com o mesmo systemd 219, systemd-networkd é ativável por soquete e sai automaticamente em ocioso. Então tudo que você precisa é puxar o seu encaixe.

Juntando tudo, as modificações no arquivo da unidade ficarão assim (com $IFACE substituído com a interface desejada):

[Unit]
Requires=systemd-networkd.socket
After=systemd-networkd.socket
...

[Service]
ExecStartPre=/usr/lib/systemd/systemd-networkd-wait-online --interface=$IFACE
ExecStart=/usr/bin/hostapd ...
...
    
por 29.06.2015 / 17:35

Tags