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
するにはどうすればよいですか?
私はsystemd 215-17 + deb8u7を使用してRaspbian 8 Jessieで実行しています。
答え1
Ubuntu 20で同じ問題が発生し、非常に混乱した問題が発生しました(たとえば、NFS自動マウントがランダムに機能しないなど)。ネットワークは実際にはオンラインですが、DNSサポートはまだ利用できません。 DNSサポートを保証するには、エントリをsystemd-resolved.service
追加してください。After
Wants