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.
Tags systemd raspbian raspberry-pi