当前位置: 首页 > news >正文

自动监控网站可用性并发送通知的 Bash 脚本

在现代的互联网世界中,网站的可用性对于业务的成功至关重要。如果您是一个网站管理员或负责监控网站运行状况的工程师,那么您知道及时发现并解决问题对于确保用户满意度至关重要。如何使用 Bash 脚本来监控多个网站的可用性,并在网站出现问题时自动发送通知

背景

在项目中,我们使用了 Rails 框架,Nginx 作为代理服务器,实现了前后端分离的架构,共有 6 个网站。为了及时发现这些网站的可用性问题,曾考虑使用 UptimeRobot,这是一个免费且简单易用的监控工具。然而,由于 UptimeRobot 的报警通知功能限制,只能通知注册账号的人,无法邀请团队成员,这让我们感到不便。因此,决定自己编写一个监控脚本

基本功能

监控脚本需要实现以下基本功能:

  1. 当网站出现故障时,发送通知。
  2. 当网站首次成功启动并处于正常运行状态时,发送通知。
  3. 在连续检查中,如果服务一直保持正常状态,不发送重复通知。
#!/bin/bash# 定义要监视的网站列表
websites=("https://dev.1.com" "https://dev.2.com" "https://dev.1.com")# 定义Feishu机器人的Webhook URL
webhook_url="xxxxxxxxx"# 函数:发送消息到 Feishu 机器人
send_message_to_feishu() {local website="$1"local status="$2"# 构建要发送的消息message="Monitor is $status: $website  监控时间: $(date "+%Y-%m-%d %H:%M:%S")"echo $message# 发送消息到 Feishu 机器人curl -X POST \$webhook_url \-H 'Content-Type: application/json' \-d '{"msg_type": "post","content": {"post": {"zh_cn": {"title": "Monitor - 服务告警","content": [[{"tag": "text","text":  "'"$message"'"},{"tag": "at","user_id": "all"}]]}}}
}'
}# 文件夹用于存储状态文件
status_folder="status_files"# 创建状态文件夹(如果不存在)
mkdir -p "$status_folder"# 遍历网站列表并检查
for website in "${websites[@]}"; do# 从网站URL中提取名称,用作状态文件名website_name=$(echo "$website" | sed 's/[^a-zA-Z0-9]/_/g')status_file="$status_folder/$website_name.status"status_code=$(curl -s -o /dev/null -w "%{http_code}" "$website")echo "status_code $status_code"if [[ ! "$status_code" =~ ^4[0-9][0-9] && "$status_code" != "000" ]]; thenif [ ! -e "$status_file" ] || [ "$(cat "$status_file")" == "down" ]; thensend_message_to_feishu "$website" "Up and Running"fiecho "up" > "$status_file"  # 更新状态为 "up"elsesend_message_to_feishu "$website" "Down"echo "down" > "$status_file"  # 更新状态为 "down"fi
done

上述脚本是一个用于监控多个网站可用性的 Bash 脚本。它会定期检查这些网站的状态,并在网站出现问题时发送通知。脚本中使用了 Feishu 机器人 来发送通知,根据自己的需求选择其他通知方式。

总结

通过这个简单的 Bash 脚本,能够自动监控多个网站的可用性,并在必要时发送通知,确保我们的网站始终保持良好的运行状态。这种自动化的监控方式可以大大减轻管理员和工程师的负担,提高了网站的可用性和用户体验。

希望这个示例对您有所帮助,可以根据您的实际需求进行修改和定制。如果您有任何问题或建议,欢迎在评论中分享!

相关文章:

自动监控网站可用性并发送通知的 Bash 脚本

在现代的互联网世界中,网站的可用性对于业务的成功至关重要。如果您是一个网站管理员或负责监控网站运行状况的工程师,那么您知道及时发现并解决问题对于确保用户满意度至关重要。如何使用 Bash 脚本来监控多个网站的可用性,并在网站出现问题…...

go 项目打包部署到服务器

1、window打包到Linux 步骤1 依次执行一下命令,就会得到一个exe 文件 步骤2 把打包的文件,放到服务器上(可以使用FinalShell工具) chmod x main # 执行这个命令,给main 文件添加 执行权限,然后执行 ls &…...

整理mongodb文档:副本集成员可以为偶数

个人博客 整理mongodb文档:副本集成员可以为偶数 想了下,仲裁节点还是不想直接说太多,怕有的同学想太多,且本身副本集就偏向运维的,新手基本也没什么权限操作,就不多废话了。 文章概叙 文章从MongoDB是否可以用偶数…...

PHP - 遇到的Bug - 总结

BUG记录1 [问题] 除数为0,不符合规则 [问题描述] // 报错信息 DivisionByZeroError:is thrown when an attempt is made to divide a number by zero.// example public class Example {public static void Main(){int number1 3000;int number2 0;tr…...

统计子岛屿的数量

统计子岛屿 题目描述 给你两个 m x n 的二进制矩阵 grid1 和 grid2 ,它们只包含 0 (表示水域)和 1 (表示陆地)。一个 岛屿 是由 四个方向 (水平或者竖直)上相邻的 1 组成的区域。任何矩阵以外…...

IntelliJ IDEA Maven 项目的依赖分析

在一个 maven 的项目中,我们需要知道我们的项目中使用的包可能有哪些冲突。 这个在 IntelliJ IDEA 中提供了贴心的查看。 选择 Maven 项目中的分析依赖。 随后,IntelliJ IDEA 将会打开一个依赖分析的标签页。 在这个标签页中,我们可以看到…...

数学建模、统计建模、计量建模整体框架的理解以及建模的步骤

数学建模、统计建模、计量建模整体框架的理解以及建模的步骤 引言正文模型的设定模型的估计建模中可能遇到的四种数据类型 模型的检验模型的应用 最后 引言 这篇博客主要写给统计或者数学专业的小白,以供快速上手建模比赛;本人将在这里整合参加建模比赛…...

WaitGroup原理分析

背景 在实际业务开发中,我们会遇到以下场景:请求数据库,批量获取1000条数据记录后,处理数据 为了减少因一次批量获取的数据太多,导致的数据库延时增加,我们可以把一次请求拆分成多次请求,并发去…...

java直播源码:如何使用Java构建一个高效的直播系统

Java直播源码是一种用于实现实时视频流传输的技术,它可以将视频流从一个地方传送到另一个地方。它使用Java语言编写,可以支持多种视频格式,如MPEG、H.264等。 Java直播源码是一种用于实现实时视频流传输的技术,它可以将视频流从一…...

Websocket获取B站直播间弹幕教程——第二篇、解包/拆包

教程一、Websocket获取B站直播间弹幕教程 — 哔哩哔哩直播开放平台 1、封包 我们连接上B站Websocket成功后,要做两件事情: 第一、发送鉴权包。第二、发送心跳包,每30秒一次,维持websocket连接。 这两个包不是直接发送过去&…...

膝关节检测之1设计目标手势与物体交互的动画

原来只用unity自带的IK,发现背部不能动,且手和手指的移动和旋转试了好像没法通过animation实现(加入关键帧并修改最终状态的数值后播放没有变化,确定最终关键帧的数值已经改了的)。看资料,发现final IK&…...

canvas力导布局

老规矩&#xff0c;先上效果图 <html><head><style>* {margin: 0;padding: 0;}canvas {display: block;width: 100%;height: 100%;background: #000;}</style> </head><body><canvas id"network"></canvas> </…...

【网络安全】「漏洞原理」(二)SQL 注入漏洞之理论讲解

前言 严正声明&#xff1a;本博文所讨论的技术仅用于研究学习&#xff0c;旨在增强读者的信息安全意识&#xff0c;提高信息安全防护技能&#xff0c;严禁用于非法活动。任何个人、团体、组织不得用于非法目的&#xff0c;违法犯罪必将受到法律的严厉制裁。 【点击此处即可获…...

JavaScript中类的学习

一、JavaScript中的类 1.什么是类 类描述了一种代码的组织结构形式&#xff0c;不同的语言中对其实现形式各有差异。JavaScript中的类Class实际是一种描述对象之间引用关系的语法糖。 在Class语法糖出现之前&#xff0c;我们想重用一个功能模块&#xff0c;通常是用一个函数来…...

1600*A. Linova and Kingdom(DFS优先队列贪心)

Problem - 1336A - Codeforces Linova and Kingdom - 洛谷 解析&#xff1a; 开始认为分情况讨论 k 小于等于叶子结点和大于叶子结点的情况&#xff0c;然后选择深度最深的叶子结点和子孙数量最小的结点&#xff0c;但是发现如果把某一个非叶子结点选取&#xff0c;那么其子孙…...

gitlab git lfs的替代软件整理汇总及分析

文章目录 前言替代软件分析git-annexgit-fatgit-symgit-meida 总结 前言 git-lfs科普 Git LFS&#xff08;Large File Storage&#xff09;是一个Git扩展&#xff0c;用于管理大型文件。Git LFS通过将大型文件存储在Git仓库之外&#xff0c;从而加快了Git操作的速度。它使用指…...

IDEA 2023.2.2图文安装教程及下载

IDE 系列的第二个年度更新现已发布&#xff0c;涵盖 IntelliJ IDEA、WebStorm、PyCharm、DataGrip、GoLand、DataSpell 以及 All Products Pack 订阅中包含的其他工具。该版本还包括多项用户体验增强功能&#xff0c;例如 Search Everywhere&#xff08;随处搜索&#xff09;中…...

第六届“中国法研杯”司法人工智能挑战赛

解锁司法科技的未来 “中国法研杯”司法人工智能挑战赛&#xff08;Legal AI Challenge&#xff0c;简称LAIC&#xff09;&#xff0c;是面向法院侧人工智能应用领域唯一权威比赛&#xff0c;大赛愿景是在拥有全球最大规模司法数据的中国&#xff0c;实现法律界、学术界、产业界…...

Springcloud中间件-----分布式搜索引擎 Elasticsearch

该笔记是根据黑马程序员的课来自己写了一遍的,b站有对应教程和资料 第一部分 第二部分 第三部分 预计看完跟着练习5小时足够 1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff…...

基于深度学习的目标检测和语义分割:机器视觉中的最新进展

基于深度学习的目标检测和语义分割是机器视觉领域的两个重要任务&#xff0c;它们在图像处理、自动驾驶、医学影像分析和智能视频监控等应用中发挥着关键作用。以下是这两个领域的最新进展&#xff1a; 目标检测&#xff08;Object Detection&#xff09;&#xff1a; 一阶段检…...

NEURAL MASK RMBG-2.0技术演进:从RMBG-1.0到ART-ENGINE的架构升级

NEURAL MASK RMBG-2.0技术演进&#xff1a;从RMBG-1.0到ART-ENGINE的架构升级 1. 背景与挑战 传统的图像抠图工具在面对复杂场景时往往力不从心。当遇到细微的发丝、半透明物体或者复杂的光影交错时&#xff0c;这些工具要么产生锯齿状的边缘&#xff0c;要么无法准确区分主体…...

百度网盘直链解析开源工具完全指南:从入门到精通

百度网盘直链解析开源工具完全指南&#xff1a;从入门到精通 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 你是否曾经历过这样的困扰&#xff1a;明明网络带宽充足&#xff…...

5分钟快速上手:用LeaguePrank打造你的专属英雄联盟游戏形象

5分钟快速上手&#xff1a;用LeaguePrank打造你的专属英雄联盟游戏形象 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank LeaguePrank是一款基于官方LCU API开发的开源工具&#xff0c;让你能够安全、合规地修改英雄联盟游戏界面…...

零代码体验LingBot-Depth:在线Demo快速生成3D深度效果图

零代码体验LingBot-Depth&#xff1a;在线Demo快速生成3D深度效果图 1. 引言&#xff1a;当普通照片“看”懂了三维世界 你有没有想过&#xff0c;一张普通的手机照片&#xff0c;除了记录下那一刻的色彩和构图&#xff0c;还能“记住”当时场景里每个物体离你有多远&#xf…...

apache-dolphinscheduler-3.4.1调度器配置虚拟机

1、下载文件3.4.1下载安装包https://mirrors.tuna.tsinghua.edu.cn/apache/dolphinscheduler/3.4.1/ 2、传到虚拟机/home/spark2下 3、解压并重命名 4、初始化 MySQL 数据库 &#xff08;1&#xff09;启动 MySQL 服务 &#xff08;2&#xff09;登录 MySQL&#xff08;输入 r…...

Qwen3-14B在Keil5 MDK开发中的奇思妙用:注释生成与调试日志分析

Qwen3-14B在Keil5 MDK开发中的奇思妙用&#xff1a;注释生成与调试日志分析 1. 嵌入式开发的痛点与AI机遇 在STM32项目开发过程中&#xff0c;每个工程师都经历过这样的场景&#xff1a;接手一个遗留项目&#xff0c;面对大段没有注释的汇编代码&#xff1b;或者调试时串口不…...

Xamarin.Macios部署与发布:从开发到上架的完整流程

Xamarin.Macios部署与发布&#xff1a;从开发到上架的完整流程 【免费下载链接】xamarin-macios .NET for iOS, Mac Catalyst, macOS, and tvOS provide open-source bindings of the Apple SDKs for use with .NET managed languages such as C# 项目地址: https://gitcode.…...

二次元助手:OpenClaw+Phi-3-mini-128k-instruct自动整理动漫资源库

二次元助手&#xff1a;OpenClawPhi-3-mini-128k-instruct自动整理动漫资源库 1. 为什么需要自动化整理动漫资源库 作为一个资深动漫爱好者&#xff0c;我的下载文件夹常年处于混沌状态。新番、老番、剧场版混杂在一起&#xff0c;文件名千奇百怪——有的带字幕组前缀&#x…...

ToClaw全方位介绍:你的第一只“龙虾”AI助手,一分钟轻松领养!

ToClaw全方位介绍&#xff1a;你的第一只“龙虾”AI助手&#xff0c;一分钟轻松领养&#xff01; 一、先来聊聊这只“龙虾”的故事 2026年开年&#xff0c;如果问中文互联网最火爆的技术热词是什么&#xff0c;那一定非「OpenClaw」莫属。这个被大家亲切称为“龙虾”的开源项目…...

4月,新一轮发票抽奖,请收好这份开具发票指南!!

4月&#xff0c;重庆发票抽奖新的一轮发票抽奖已经了&#xff08;目前第三轮&#xff09;。你所在的城市不知道是不是也是第三期发票抽奖了。发票抽奖首先需要发票。发票除了线下直接找商家开具外&#xff0c;我们也可以在线上直接开具。这份发票开具指南&#xff0c;归纳总结我…...