this の質問とその回答ごとに、サービスファイルに以下を追加しました。
Wants=network-online.target
After=docker.service network.target network-online.target
私も実行しました:
systemctl enable NetworkManager-wait-online.service
systemd-networkd-wait-online.service
それでも、git pull Origin master
を使用するExecStartPre
タスクは、接続の問題のように見えるために失敗します。
Mar 22 16:17:21 COMPUTER git[1983]: ssh: Could not resolve hostname github.com: Name or service not known
Mar 22 16:17:21 COMPUTER git[1983]: fatal: Could not read from remote repository.
明らかなものがないのですか? git pull
を使用するために待つ必要がある別のサービスはありますか? (関連がある場合、私はUbuntu 16.10とsystemd 231を使用しています。)
最初のステップは、NetworkManager
またはsystemd-networkd
を使用しているかどうかを判別することです。使用しているものに対してwait-online
を有効にします(この例ではsystemd-networkd
と仮定します):
systemctl enable systemd-networkd-wait-online.service
wait-online
サービスの後にサービスを開始してください:
[Unit]
...
After=systemd-networkd-wait-online.service
Requires=systemd-networkd-wait-online.service
(requiresはwants
のより厳密なバリアントです。この場合、ハードな依存関係が必要なようです)。
これにより、ネットワークが保証された後にサービスが開始されます。
代わりに(または前のソリューションと組み合わせて)、Restart=
フラグを使用して、失敗したときにサービスを再起動するように構成できます。
[Unit]
...
Restart=on-failure
RestartSec=5
https://www.freedesktop.org/software/systemd/man/systemd.service.html#Restart=
起動が遅くならないので、これはより良い方法かもしれません( https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/#cutthecraphowdoimakenetwork.targetworkforme -wait-online
を使用するは起動時間を大幅に遅くする可能性があります)が、サービスが失敗した場合のサービスの動作が心配な場合は、オプション1またはその両方を使用してください。