Iniciando o serviço systemd após network-online.target, mas o DNS ainda não está disponível

3

Eu tenho um programa que quero começar por systemd na inicialização, mas somente depois que o DNS estiver disponível.

O arquivo de serviço depende de network-online.target :

$ cat  /etc/systemd/system/te-m-pi.service
[Unit]
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
WorkingDirectory=/opt/te-m-pi
ExecStart=/opt/te-m-pi/te-m-pi.py

[Install]
WantedBy=default.target

No entanto, quando é iniciado, ele é encerrado imediatamente porque não pode resolver alguns nomes de host necessários:

te-m-pi.py[399]: socket.gaierror: [Errno -2] Name or service not known
systemd[1]: te-m-pi.service: main process exited, code=exited, status=1/FAILURE
systemd[1]: Unit te-m-pi.service entered failed state.

Se eu editar o arquivo python e inserir um simples time.sleep(10) no início, ele esperará 10 segundos e, então, será executado como deveria.

Aparentemente, quando ele é iniciado, a rede ainda não está disponível, apesar da dependência de network-online.target . Como posso ter certeza de que ele é iniciado apenas quando a rede está realmente ativa e configurada?

Eu estou rodando em Raspbian 8 Jessie com systemd 215-17 + deb8u7.

    
por MLu 18.07.2017 / 05:15

0 respostas