私のシステムサービスがネットワークを待っていないのはなぜですか?

私のシステムサービスがネットワークを待っていないのはなぜですか?

すべてこれ質問と回答、サービスファイルに以下を追加しました。

Wants=network-online.target
After=docker.service network.target network-online.target

私も以下を実行しました。

systemctl enable NetworkManager-wait-online.service
systemd-networkd-wait-online.service

ただし、ExecStartPre接続の問題により、使用中の操作は引き続き失敗します。git pull origin master

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を使用しています。)

ベストアンサー1

NetworkManager最初のステップは、またはを使用していることを確認することですsystemd-networkdwait-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=

[Service]
...
Restart=on-failure
RestartSec=5

https://www.freedesktop.org/software/systemd/man/systemd.service.html#Restart=

これは起動速度を遅くしないので、おそらくより良いアプローチです。https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/#cutthecraphhowdoimakenetwork.targetworkforme-wait-online起動時間が大幅に遅くなることがあります。ただし、サービスが失敗した場合に何が起こるのか心配な場合は、オプション1または両方を選択してください。

おすすめ記事