Debian systemd network-online.target が動作しませんか?

Debian systemd network-online.target が動作しませんか?

Debian Jessieでシステムサービスを作成しようとしています。network-online.target到着するとすぐに始める必要があります。

インターフェイスがまだ設定されておらず、DHCPクエリが始まったばかりの問題がnetwork-online.target同時に発生しました。network.target

この問題は、古いネットワーク構成を使用しているDebianに固有のようです。

この問題を迂回する方法や動作させる方法は何ですかnetwork-online.target

答え1

を使用しているため、/etc/network/interfaces各インターフェイスの状態を監視するにはsystemdサービスが必要です。利用可能であることを確認してください(Ubuntu 15.04のパッケージからインストールされます/lib/systemd/system/ifup-wait-all-auto.service)。ifupdownそうでない場合は、/etc/systemd/system/ifup-wait-all-auto.service次のように作成して貼り付けます。

[Unit]
Description=Wait for all "auto" /etc/network/interfaces to be up for network-online.target
Documentation=man:interfaces(5) man:ifup(8)
DefaultDependencies=no
After=local-fs.target
Before=network-online.target

[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutStartSec=2min
ExecStart=/bin/sh -ec '\
  for i in $(ifquery --list --exclude lo --allow auto); do INTERFACES="$INTERFACES$i "; done; \
  [ -n "$INTERFACES" ] || exit 0; \
  while ! ifquery --state $INTERFACES >/dev/null; do sleep 1; done; \
  for i in $INTERFACES; do while [ -e /run/network/ifup-$i.pid ]; do sleep 0.2; done; done'

[Install]
WantedBy=network-online.target

Ubuntu 15.04システムに存在するサービスファイルですが、[Install]作業をより簡単にするためのセクションが追加されました。 Ubuntu 15.04の動作がifupDebian Jessieの動作と同じであることを望みます。ifupそうでない場合は、いくつかの修正が必要です(特に最後の行)。

それからsudo systemctl enable ifup-wait-all-auto.service。コンピュータを再起動したら、network-online.target(少なくとも)インターフェイスを起動してから到達したことを確認する必要があります。

答え2

一度見つけました。Githubへの回答継続的にサーバーにpingを試して問題を解決しました。 pingが成功した場合にのみサービスが続行されます。

[Service]
ExecStartPre=/bin/sh -c 'until ping -c1 google.com; do sleep 1; done;'
ExecStart=<your command>

google.com私のメインスクリプトは私のサーバーに接続する必要があるので、これを私のサーバーに置き換えました。

答え3

注目!私はRaspbian Jessieで見つけました。 /etc/networkインターフェイスからすべてのコメント行を削除すると機能します!これは構文解析エラーのようです=)私の特別なケースでは、コメントを残してiface eth0 inet dhcp長い間忘れましたが、Raspbian Jessieにアップグレードしてカーネルを再構築した後、非常に奇妙な動作が発生しました。 DHCPを使用して調整を拒否します。 /etc/ネットワーク/インターフェース。だから私はそれのすべての説明を削除しました。作業ラインだけを再起動して動作しました!スクリプトパッチ/編集は必要ありません!

答え4

すべてhttps://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/サービスを開始するための推奨方法後ろにネットワークは水平であり、ネットワークオンライン。「内部に。提供する文書:

 "After=network-online.target"
 "Wants=network-online.target"

しかし、「ネットワークオンライン。「ネットワークが完全に水平ではないため、サービスが失敗し、エラーがあることがわかりました(https://github.com/coreos/bugs/issues/1966)そしてそれは100%正確であることが保証されていません。

実際、次のような動的ネットワーク構成ツールは、ネットワーク管理者「この状況で使用されるネットワークの状態は、決して100%正確または予測不可能です。明らかに、エラーを説明するリンクから判断できます。」ネットワークオンライン。「使用しているアプリケーションによっては、動作が一貫しない場合があります。

解決策
サービスの開始順序を分析して、後に開始されたサービスを利用する必要があります。ネットワークオンライン。":

 systemd-analyze plot > /home/pi/graph.svg

これは、エラーなしにネットワークレベルとサービスの開始を保証するターゲットが見つかるまで徐々に後続のサービスにターゲットを変更する反復プロセスです。私の場合、sleep 10スクリプトにSystemDサービス呼び出しを追加する必要がありました。

関連情報