我正在编写一个服务脚本,systemd
该脚本每 1 小时记录一次带宽使用情况。如果网络出现故障,某物应该告诉此脚本网络已关闭,脚本将暂时停止。同样,如果网络再次恢复,它应该告诉它网络已启动。
我在 Ubuntu 15.10 上使用 bash 编写脚本
在您提出解决方案之前,请注意我不需要解决这个问题,比如 ping 某些服务器。
答案1
您能做的最好的事情就是使用网络管理器中已有的事件驱动状态。
NetStatus.x
在以下位置创建文件/etc
:sudo nano /etc/NetStatus.up
添加以下文本:
这是 NetStatus 文件。如果其名称的扩展名为“up”,则表示网络状态为开启,而扩展名为“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 的低级系统到超级计算机。