在network-online.target之后启动systemd服务但DNS仍然不可用

在network-online.target之后启动systemd服务但DNS仍然不可用

我有一个程序,我想在systemd启动时启动该程序,但只有在 DNS 可用后才能启动。

服务文件取决于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

然而,当它启动时,它会立即退出,因为它无法解析它需要的一些主机名:

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.

如果我编辑 python 文件并time.sleep(10)在开头插入一个简单的文件,它会等待 10 秒,然后愉快地按预期运行。

显然,当它启动时,网络不是然而可用,尽管依赖于network-online.target.我如何确保它仅在网络真正启动并配置后才启动?

我在 Raspbian 8 Jessie 上使用 systemd 215-17+deb8u7 运行它。

答案1

刚刚在 Ubuntu 20 上遇到了同样的问题,导致非常混乱的问题(例如,NFS 自动挂载器随机无法工作):网络实际上已在线,但 DNS 支持尚不可用。要确保 DNS 支持,请添加systemd-resolved.serviceAfterWants条目。

相关内容