監控 systemd 腳本的網路狀態

監控 systemd 腳本的網路狀態

我正在編寫一個服務腳本,systemd每 1 小時記錄一次頻寬使用量。如果網路故障,某物應該告訴此腳本網路已關閉並且腳本將暫時停止。同樣,如果網路再次恢復,應該告訴它網路已啟動。

我正在 Ubuntu 15.10 上使用 bash 編寫腳本

在建議解決方案之前,請注意我不需要解決此問題,例如 ping 某些伺服器。

答案1

您能做的最好的事情就是使用網路管理員中已有的事件驅動狀態。

  1. NetStatus.x在以下位置建立一個文件/etc

    sudo nano /etc/NetStatus.up
    
  2. 新增以下文字:

    這是 NetStatus 檔案。如果其名稱的副檔名為“up”,則表示網路狀態為“up”,而副檔名為“down”則表示網路狀態為“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
    

為什麼?

重新命名是在任何作業系統(包括基於軟碟的系統)上更改狀態的最快方法,並且非常易於使用。我使用上述系統來取得從基於 MS-DOS 的低階系統到超級電腦的伺服器狀態、備份狀態、計算狀態。

相關內容