Php程序监控邮件提醒linux,Linux shell 监控应用存活并发邮件通知

该博客讲述了如何使用Shell脚本定时执行HTTP请求,检查接口返回数据量,并通过邮件发送结果。脚本在每天7:10、12:10和16:10执行,根据日期参数调用多个接口,并使用jq解析JSON数据。当脚本在cronjob中按预定时间运行时,会将接口返回的数据量信息通过邮件发送给指定收件人。
摘要由CSDN通过智能技术生成

需求

每天执行三次,分别为:7:10,12:10,16:10

7:10执行日期参数为T-1,12:10,16:10执行日期参数为T(T是指当天)

每次执行判断一下接口返回的数据量,以邮件形式发送给相关人员

脚本

#!/bin/bash

var1=$1

webUrls=(

"http://sso1169sjdptest.haier.net/fx_app/common/inter?fresh=1&dataType=rrs_fxapp_for_leader&params=period_date::${var1}"

"http://sso1169sjdptest.haier.net/fx_app/common/inter?fresh=1&dataType=rrs_fxapp_m_wl_gongm_result_info_view&params=period_date::${var1}"

"http://sso1169sjdptest.haier.net/fx_app/common/inter?fresh=1&dataType=rrs_fxapp_m_wl_lianq_result_info_view&params=period_date::${var1}"

"http://sso1169sjdptest.haier.net/fx_app/common/inter?fresh=1&dataType=rrs_fxapp_for_soldier_mall_score&params=period_date::${var1}"

)

declare -a name

#使用curl命令检查http服务器的状态

#-m设置curl不管访问成功或失败,最大消耗的时间为5秒,5秒连接服未响应则视为无法连接

#-s设置静默连接,不显示连接时的连接速度、时间消耗等信息

#-o将curl下载的页面内容导出到/dev/null(默认会在屏幕显示页面内容)

#-w设置curl命令需要显示的内容%{http_code},指定curl返回服务器的状态码

# 如果不是看结果,是看http状态的话使用如下函数

check_http(){

status_code=$(curl -m 5 -s-o /dev/null -w %{http_code} https://www.baidu.com)

}

function httpRequest()

{

echo "日期参数:${var1}"

for ((i=0; i

do

echo "顺序:${i},请求:${webUrls[i]}"

res=$(curl -m 5 -s ${webUrls[i]} | jq '.data' | jq 'length')

name[$i]=$res

echo ${name[$i]} #为方便检查,加了打印

done

}

httpRequest "$@"

emailContent="链接数据接口:${name[0]} 中心数据接口:${name[1]} 链群数据接口:${name[2]} 评分数据接口:${name[3]}"

echo "${emailContent}" | mail -s '4个指标接口当前的数据通知' marvin.ma@redcreation.net,zhangsan@163.com

收到的邮件:

4b025d8dc12a

email

知识储备

获取当前时间:

time=$(date "+%Y%m%d-%H%M%S")

time2=$(date "+%Y-%m-%d %H:%M:%S")

echo "${time}"

昨天:

echo $(date +"%Y-%m-%d" -d "-1day")

curl 到json内容:

#使用curl命令检查http服务器的状态

#-m设置curl不管访问成功或失败,最大消耗的时间为5秒,5秒连接服未响应则视为无法连接

#-s设置静默连接,不显示连接时的连接速度、时间消耗等信息

#-o将curl下载的页面内容导出到/dev/null(默认会在屏幕显示页面内容)

#-w设置curl命令需要显示的内容%{http_code},指定curl返回服务器的状态码

res=$(curl -s "https://www.baidu.com")

echo $res

接收参数:

#!/bin/bash

# 必须写绝对路径,不然crontab不执行,因为找不到路径

log=/opt/jc/task.log

var1=$1

test()

{

time=$(date "+%Y-%m-%d %H:%M:%S")

echo "${time} do something, set var1 = ${var1}" >> $log

}

test

测试定时任务

vi /etc/crontab

添加一行,每2分钟执行一次

*/2 * * * * root /opt/jc/curl.sh hahaha

为了完成这个需求,我的crontab的内容如下

10 7 * * * root /opt/jc/curl.sh $(date +"%Y%m%d" -d "-1day")

10 12,16 * * * root /opt/jc/curl.sh $(date "+%Y%m%d")

shell处理json数据工具-----jq

获取接口返回的数据中data的值数组大小

res=$(curl -m 5 -s ${webUrls[i]} | jq '.data' | jq 'length')

遇到的问题

脚本不执行不知道为啥

方案:先用如下命令看看crontab服务是否正常,不正常的进行安装。

service crond status

没有安装的话先安装。

定时任务出错

出错的情况会有邮件通知,位置在/var/mail/root中,可以查看脚本执行失败的原因

Shell 脚本时显示declare not found的问题

ubuntu系统将默认的bash换成了dash,需要手动替换下,参考下面的参考链接Shell 脚本时显示declare not found的问题配置。

shell里发送邮件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值