目标:在linux服务器上,远程监控一个系统是否存活,
思路:利用curl 返回远程连接的状态码,如果不是200,说明接口异常,就发邮件(需要在linux配置),发短信(调用远程接口)、发微信(调用远程接口通过公众号实现)等发出报警通知,我是采用了第三种。为了不间断获取接口信息,我们这里是通过while do sleep来实现的,免去了写定时器的麻烦。写好sh脚本之后直接运行就可以了,运行方式 ./xx.sh 或者 后台运行 nohup sh checkurl.sh &,本次测试选用后台运行的方法。
具体步骤如下:
1.编写sh文件
#result_code=`curl -I -m 10 -o /dev/null -s -w %{http_code} http://113.113.106.186:8088/xxx`
#!/bin/bash
#Author:
#设置变量,url为你需要检测的目标网站的网址(IP或域名)
http_addr=http://113.113.106.186:8088/xxx
#定义函数get_http_status:
#使用curl命令检查http服务器的状态
#-m设置curl不管访问成功或失败,最大消耗的时间为5秒,5秒连接服务为相应则视为无法连接
#-s设置静默连接,不显示连接时的连接速度、时间消耗等信息
#-o将curl下载的页面内容导出到/dev/null(默认会在屏幕显示页面内容)
#-w设置curl命令需要显示的内容%{http_code},指定curl返回服务器的状态码
get_http_status() {
status_code=`curl -m 35 -s -o /dev/null -w %{http_code} $http_addr`
}
#循环执行检测方法
while :
do
get_http_status
date=$(date +%Y%m%d-%H:%M:%S)
#生成报警邮件的内容
#echo "当前时间为:$date
#$url服务器异常,状态码为${status_code}
#请尽快排查异常."
#指定测试服务器状态的函数,并根据返回码决定是发送邮件报警还是将正常信息写入日志
#-ne 不等于
if [ "$status_code" -ne 200 ];then
echo "$url连接失败"
curl "http://weixin.xxxtest&describe=server exception&dealPerson=jaxwan&dealTime=10minute&remark=请尽快处理&url=https://www.csdn.com&username=wanwenzhe"
else
echo "$url连接正常"
echo "221"
fi
#多少秒检测一次
sleep 60
done
2.运行
直接运行的方式: ./checkapp.sh
后台运行的方式:命令:nohup sh checkapp.sh &
并且输出内容到sh文件的同级目录的nohup.out文件内