我正在編寫一個服務腳本,systemd
每 1 小時記錄一次頻寬使用量。如果網路故障,某物應該告訴此腳本網路已關閉並且腳本將暫時停止。同樣,如果網路再次恢復,它應該告訴它網路已啟動。
我正在 Ubuntu 15.10 上使用 bash 編寫腳本
在建議解決方案之前,請注意我不需要解決此問題,例如 ping 某些伺服器。
答案1
您能做的最好的事情就是使用網路管理員中已有的事件驅動狀態。
NetStatus.x
在以下位置建立一個文件/etc
:sudo nano /etc/NetStatus.up
新增以下文字:
這是 NetStatus 檔案。如果其名稱的副檔名為“up”,則表示網路狀態為“up”,而副檔名為“down”則表示網路狀態為“down”。 (呃!)
編輯
/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 ;;
/etc/NetStatus.up
修改您自己的收集腳本,透過以下程式碼片段在實際開始收集資料之前檢查是否存在:if [ -e /etc/NetStatus.up ] ; then #move your existing collection in here fi
為什麼?
重新命名是在任何作業系統(包括基於軟碟的系統)上更改狀態的最快方法,並且非常易於使用。我使用上述系統來取得從基於 MS-DOS 的低階系統到超級電腦的伺服器狀態、備份狀態、計算狀態。