惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
月光博客
月光博客
aimingoo的专栏
aimingoo的专栏
Google DeepMind News
Google DeepMind News
Recent Announcements
Recent Announcements
MyScale Blog
MyScale Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
F
Fortinet All Blogs
小众软件
小众软件
D
Docker
U
Unit 42
博客园 - 聂微东
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
爱范儿
爱范儿
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
云风的 BLOG
云风的 BLOG
博客园 - 司徒正美
有赞技术团队
有赞技术团队
腾讯CDC

lvbibir's Blog

shell | 磁盘空间分析脚本 Linux cat 和 tee 命令写入文件 python | 使用 uv 管理你的 python 环境 Claude Code 完整配置指南 windows | mihomo 内核独立部署指南 linux | 磁盘扩容 wsl | 释放长久运行占用的磁盘空间 mysql | 线程上限问题处理 麒麟 7.6 安装谷歌 OTP 认证模块 suse 12sp5 升级 openssh 及 openssl suse 12sp5 部署 mysql 5.7 《谁的青春不迷茫》 docker | centos7 部署 docker vim | 基础配置和使用 windows | rime 输入法 & 雾凇方案 shell | sshpass 批量传输文件及执行命令 wsl | 原生 linux 方式安装 docker nodejs | fnm + pnpm 开发环境配置 wsl | 安装配置 miniconda 虚拟环境 wsl | 自动更新系统代理 wsl | bashrc 环境变量不正确加载的处理方法 wsl | win10 安装 wsl2 troubleshooting | ssh 成功但是 scp 失败 linux | 常用命令总结 docker 部署 piclist Zabbix | 监控端口连通性并自动追踪 TCP 路由 windows | 自定义开机快速启动项 windows | miniconda 配置 python 虚拟环境 Zabbix | 监控主机到指定 ip 的流量大小 shell | centos 初始化
shell | 检测网站存活并自动钉钉告警
lvbibir · 2023-12-07 · via lvbibir's Blog

脚本内容如下, 替换钉钉 bot 的 token, 将脚本放至 crontab 执行即可

#!/bin/bash

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# 设置要检测的网页URL
urls=("https://emp.cnpc.com.cn/index.html" "https://mdm.cnpc.com.cn/")
#urls=("https://emp.cnpc.com.cn/index.html" "https://mdm.cnpc.com.cn/" "https://www.956100.com" "https://mm.956100.com" "https://app.956100.com")

# 钉钉机器人的 webhook 地址
webhook="https://oapi.dingtalk.com/robot/send?access_token=******************************"

# 最大连续无法访问次数
max_attempts=3

# 设置并发进程数为 URL 数量
max_concurrent=${#urls[@]}

# 初始化计数器
completed=0

for url in "${urls[@]}"; do
    # 在后台启动一个子进程进行测试
    (
        attempts=0
        while [ $attempts -lt $max_attempts ]; do
            # 使用curl获取网页内容,并保存HTTP状态码到变量response_code
            response_code=$(curl -s --connect-timeout 5  -o /dev/null -w "%{http_code}" "$url")

            # 判断HTTP状态码来确定网页是否可访问
            if [ "$response_code" -eq 200 ]; then
                break
            else
                attempts=$((attempts + 1))
            fi

            if [ $attempts -ge $max_attempts ]; then
                message="告警: $(date +"%Y年%m月%d日-%H:%M:%S") ${url} 网页无法访问,HTTP状态码: $response_code"
                curl -X POST ${webhook} -H "Content-Type: application/json" -d "{\"msgtype\": \"text\", \"text\": {\"content\":\"$message\"}}"
                break
            fi

            sleep 60  # 等待 20 秒后再次尝试
        done

            completed=$((completed + 1))
    ) &

    # 控制并发进程数
    if [ $completed -ge $max_concurrent ]; then
        wait
        completed=0
    fi
done

# 等待剩余的并发进程完成
wait

exit 0

以上