需要准备的文件
1.配置文件(config)
创建一个名为 config 的文件,内容如下:
CORPID=your_corpid CORPSECRET=your_corpsecret AGENTID=your_agentid
2.地址文件(ipadd)
创建一个名为ipadd的文件,内容如下:
主机名 192.168.0.1
3.脚本文件(*.sh) 内容详见代码
4.将脚本、ipadd 文件和 config文件放在同一个目录下
5.创建计划任务

#命令行中执行 crontab -e */5 * * * * /path/to/script_name.sh #/path/to/script_name.sh 为你脚本所在位置 */5 * * * * 表示没5分钟执行一次
#!/bin/bash
# 脚本所在目录
SCRIPT_DIR=$(dirname "$0")
# 文件路径(相对于脚本所在目录)
IP_FILE="$SCRIPT_DIR/ipadd" # 存放 IP 地址以及对应名称的文件
CONFIG_FILE="$SCRIPT_DIR/config" # 存放企业微信应用配置的文件
# 读取企业微信应用配置
CORPID=$(grep "CORPID=" "$CONFIG_FILE" | cut -d '=' -f2)
CORPSECRET=$(grep "CORPSECRET=" "$CONFIG_FILE" | cut -d '=' -f2)
AGENTID=$(grep "AGENTID=" "$CONFIG_FILE" | cut -d '=' -f2)
# 获取 access_token
ACCESS_TOKEN=$(curl -s "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CORPID&corpsecret=$CORPSECRET" | grep -Po '"access_token":"\K[^"]*')
# 检查文件是否存在
if [ ! -f "$IP_FILE" ]; then
echo "Error: IP file $IP_FILE not found"
exit 1
fi
if [ ! -f "$CONFIG_FILE" ]; then
echo "Error: Config file $CONFIG_FILE not found"
exit 1
fi
# 获取当前时间
TIME=$(date "+%Y-%m-%d %H:%M:%S")
# 检查 IP 地址并构建消息
MESSAGE="external IP Connectivity Check Result at $TIME:\n"
ALL_REACHABLE=1 # 标志变量,1 表示所有设备都可达,0 表示有不可达设备
while read -r LINE; do
# 跳过空行和注释
[ -z "$LINE" ] && continue
[[ "$LINE" =~ ^# ]] && continue
# 提取名称和 IP
NAME=$(echo "$LINE" | awk '{print $1}')
IP=$(echo "$LINE" | awk '{print $2}')
# 检查 IP 格式
if ! [[ "$IP" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
MESSAGE+="Invalid IP format for $NAME: $IP\n"
ALL_REACHABLE=0
continue
fi
# ping 测试(发送 3 个数据包,超时 2 秒)
if ping -c 3 -W 2 "$IP" >/dev/null 2>&1; then
MESSAGE+=" $NAME ($IP) is reachable\n"
else
MESSAGE+=" $NAME ($IP) is unreachable\n"
ALL_REACHABLE=0
fi
done <"$IP_FILE"
# 如果所有设备都可达则不发送消息
if [ "$ALL_REACHABLE" -eq 1 ]; then
exit 0
fi
# 发送消息到企业微信应用
curl -s -S -X POST -H 'Content-Type: application/json' \
-d "{
\"touser\": \"@all\",
\"msgtype\": \"text\",
\"agentid\": $AGENTID,
\"text\": {
\"content\": \"$MESSAGE\"
}
}" "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$ACCESS_TOKEN"