You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Bash脚本以显示具体宕机的服务器IP?

修改Bash脚本以显示具体宕机的服务器IP

我来帮你搞定这个问题!原脚本的逻辑是只有当所有主机都ping失败时才触发警告,但没有记录具体是哪台机器出了问题。我们可以调整脚本,跟踪每台主机的ping结果,收集所有宕机的IP,最后在弹窗里展示出来。

修改后的完整脚本

#!/bin/bash
HOSTS="192.168.11.154 192.168.11.155"
COUNT=5
# 初始化存储失败主机的变量
FAILED_HOSTS=""

pingtest(){
    for myHost in "$@"
    do
        # 单独测试每台主机,ping失败则加入失败列表(屏蔽ping的输出)
        if ! ping -c "$COUNT" "$myHost" > /dev/null 2>&1; then
            FAILED_HOSTS+="$myHost\n"
        fi
    done
    # 如果失败列表非空,返回0(表示需要触发警告)
    [ -n "$FAILED_HOSTS" ] && return 0 || return 1
}

if pingtest $HOSTS
then
    # 将失败的IP列表插入到警告文本中
    zenity --warning --text="<span size=\"xx-large\">WARNING</span>\n\n\n以下服务器已宕机:\n<b>$FAILED_HOSTS</b>" --title="SERVER DOWN" --ok-label="OKAY"
fi

关键修改点说明

  • 新增FAILED_HOSTS变量:专门用来存储所有ping失败的服务器IP,初始化为空字符串。
  • 逐台主机判断ping结果:不再用&& return 1提前退出循环,而是对每台主机单独检测——如果ping失败,就把该IP追加到失败列表里,用换行符\n分隔,保证弹窗里的IP分行显示更清晰。
  • 调整函数返回逻辑:遍历完所有主机后,检查失败列表是否非空——只要有宕机的主机,就返回0触发警告;否则返回1跳过警告。
  • 更新弹窗文本内容:把原来的占位符*IP*替换为实际的失败IP列表,同时调整文本格式,让警告信息更直观。

额外优化建议

  • 可以给ping命令加上超时参数(比如-W 2表示超时2秒),避免脚本长时间卡在ping命令上:ping -c "$COUNT" -W 2 "$myHost"
  • 如果希望弹窗里的IP排版更整齐,可在IP前加\t缩进,或者调整zenity的文本样式标签。

内容的提问来源于stack exchange,提问作者Alexandr Bortnik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:10:36