systemd スクリプトのネットワーク状態を監視する

systemd スクリプトのネットワーク状態を監視する

1時間ごとに帯域幅の使用状況を記録するサービススクリプトを作成していますsystemd。ネットワークがダウンすると、何かこのスクリプトはネットワークがダウンしていることを通知し、スクリプトは一時的に停止します。同様に、ネットワークが再び起動した場合、それネットワークが稼働していることを通知する必要があります。

Ubuntu 15.10でスクリプトを書くためにbashを使用しています

解決策を提案する前に、サーバーに ping を実行するなどの回避策は必要ないことにご注意ください。

答え1

最善の方法は、Network Manager ですでに利用可能なイベント駆動型ステータスを使用することです。

  1. NetStatus.x次の場所にファイルを作成します/etc:

    sudo nano /etc/NetStatus.up
    
  2. 次のテキストを追加します。

    これは NetStatus ファイルです。名前の拡張子が「up」の場合はネットワークの状態がアップであることを意味し、「down」の場合はダウンしていることを意味します。(当然です!)

  3. /etc/NetworkManager/dispatcher.d/01ifupdown以下の太字部分を編集して追加します。

    case "$2" in
        up|vpn-up)
            export MODE="start"
            export PHASE="post-up"
            exec run-parts /etc/network/if-up.d
            mv /etc/NetStatus.down /etc/NetStatus.up
            ;;
        down|vpn-down)
            export MODE="stop"
            export PHASE="post-down"
            exec run-parts /etc/network/if-post-down.d
            mv /etc/NetStatus.up /etc/NetStatus.down
            ;;
    
  4. /etc/NetStatus.up次のコード スニペットを使用して、実際にデータの収集を開始する前に、独自の収集スクリプトを変更して、の存在を確認します。

    if [ -e /etc/NetStatus.up ] ; then
      #move your existing collection in here
    fi
    

なぜ?

名前の変更は、フロッピー ベースのシステムを含むあらゆる OS のステータスを変更する最も速い方法であり、非常に簡単に使用できます。私は上記のシステムを使用して、低レベルの MS-DOS ベースのシステムからスーパー コンピュータに至るまで、サーバー ステータス、バックアップ ステータス、計算ステータスを取得しました。

関連情報