因此,我想密切關注我的網路連接,以便我可以向我的 ISP 提交報告。 (數據機似乎每天都會斷電一次,持續約 30-60 秒)
所以我複製了這個方便的小腳本
並運行它
watch -n 15 ./ping-test.sh
我一直在拔掉調變解調器的插頭來測試它。
網路中斷後,手錶第一次運行腳本,它運作良好(發送一些電子郵件),然後就失效了。一旦網路恢復,腳本“完成”,然後 watch 再次運行它。
因此,我會在網路故障時收到郵件,但不會收到網路故障持續時間的郵件。
如果我直接從命令列運行腳本,它將運行(電子郵件)然後退出。
有什麼想法嗎?如何讓腳本在網路中斷後繼續運作?
答案1
平如果無法達到目標就會掛起,這也許是腳本失效的原因,因為平仍在等待回覆。嘗試新增-w 最後期限或者-W 暫停的選項平。
答案2
您可以使用“ip Monitor”即時執行此操作。這將輸出任何事件,例如 IP 位址被刪除或新增、連結狀態從可操作變更為斷開連接,或路由以某種方式變更。
ip monitor all >> /some/log.log &
您必須以附加模式開啟。如果您想讓它在終端機之外運行,您可以使用「disown %1」來取消該作業
如果您也需要時間戳,有幾種方法。一個簡單的方法是使用 inotifywait 檢查檔案是否有更新,然後將日期附加到其中。將上述內容和此內容放入 shell 腳本中很容易,並且可能會否認這一點,因此您將獲得
ip monitor all >> /some/log.log &
while inotifywait -qq -e modify /some/log.log; do
sleep 0.2;
date >>/root/mon.log;
done
享受
答案3
您使用“watch”命令的解決方案不好。我會嘗試用這樣的方法來解決這個問題:
#!/bin/bash
HOSTS="foo.bar foo2.bar"
COUNT=4
while :
do
for myHost in $HOSTS
do
count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
if [ $count -eq 0 ]; then
# 100% failed
echo "Host : $myHost is down (ping failed) at $(date)"
fi
done
sleep 15 # here is your refresh rate
done
然後像普通腳本一樣運行它:./script_name.sh
使用 CTRL+C 終止。
答案4
它會失效,因為它已經完成但依賴watch
仍然存在的父進程 - 命令。
因此,我會在網路故障時收到郵件,但不會收到網路故障持續時間的郵件。
該腳本已經列印遠端系統關閉時的日期:
echo "Host : $myHost is down (ping failed) at $(date)" | mail -s "$SUBJECT" $EMAILID
如何讓腳本在網路中斷後繼續運作?
它正在ping
使用,-c 1
因此在發送 1 個 ECHO_REQUEST 封包後將停止。
將其放入 cron 中每分鐘運行一次:
*/1 * * * * /path/to/your/script