基于python实现的监听服务接口是否正常,发送异常消息到钉钉群

news/2024/10/5 20:49:07/

获取钉钉机器人

  • 创建钉钉群组(要求至少三个成员)
  • 进入群组 设置>机器人>添加机器人
  • 选择自定义机器人 按照要求填写完获取到 Webhook的链接

实现代码

python">
from time import sleep
import requests
import json
from datetime import datetime
import logging# 配置日志记录的格式
logging.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s', level=logging.INFO)# 需要检测的目标url
target_url = 'http://XXXX'
# 参数
target_args = {'question': 'XXX'}
# 定义任务运行的时间段
start_time = "08:30"
end_time = "19:00"
# 定义任务运行的间隔时间
sleep_time = 60 * 60 * 2def chat_service_check(url, body):try:response = requests.post(url, json=body)if response.status_code != 200:logging.info(f'响应结果异常:响应值={response.text}')return Falseif json.loads(response.text)['code'] != 200:logging.info(f'调用接口失败:{response.text}')return Falseelse:return Trueexcept requests.RequestException as e1:logging.error(f'响应结果异常', e1)return Falsedef dingmessage(msg):# todo: 替换自己的钉钉tokenwebhook_url = 'https://oapi.dingtalk.com/robot/send?access_token=XXXXX'data = {'msgtype': 'text','text': {'content': '监控通知:' + msg}}res = requests.post(webhook_url , json=data)logging.info(f'通知返回结果:{res.text}')def task():logging.info(f'当前时间:{datetime.now().strftime("%Y-%m-%d %H:%M:%S")},调用目标接口')chat_check = chat_service_check(target_url, body=target_args)logging.info(f'当前时间:{datetime.now().strftime("%Y-%m-%d %H:%M:%S")},调用目标接口结束')if not chat_check:logging.info(f'当前时间:{datetime.now().strftime("%Y-%m-%d %H:%M:%S")},调用目标接口失败')dingmessage('chat 接口异常请即使处理')if __name__ == '__main__':while True:current_time = datetime.now()start_time1 = datetime.strptime(str(datetime.now().date()) + start_time, "%Y-%m-%d%H:%M")end_time1 = datetime.strptime(str(datetime.now().date()) + end_time, "%Y-%m-%d%H:%M")# 检查当前时间是否在指定范围内if start_time1 <= current_time < end_time1:logging.info("当前时间在早上八点三十到下午七点之间,执行task任务")try:task()except Exception as e:logging.info('执行任务失败....', e)else:logging.info("当前时间不在早上八点三十到下午七点之间,不执行task任务")logging.info(f'程序睡眠时间{sleep_time}秒')sleep(sleep_time)

linux 服务器启动脚本

vim start.sh
#!/bin/bash
nohup python3 service_monitor.py >  monitor.log &
  • 执行脚本
sh start.sh

http://www.ppmy.cn/news/1473391.html

相关文章

简述Vue中的数据双向绑定原理

Vue中的数据双向绑定原理是Vue框架的核心特性之一&#xff0c;它通过数据劫持结合发布者-订阅者模式来实现。下面将详细阐述Vue中数据双向绑定的原理&#xff0c;并尽量按照清晰的结构进行归纳&#xff1a; 一、数据劫持 使用Object.defineProperty()&#xff1a; Vue在组件…

使用pt-table-checksum 3.6.0避坑指南

3.6.0在使用dsn的情况下存在bug&#xff0c;最后回退3.4.0版本 创建ptuser用户 #使用验证算法&#xff0c;否则默认会报错 #创建用户 create user ptuser% identified with sha256_password by "你的密码"; #发现用dsn还是会报对应错误 #授权 GRANT CREATE,INSERT…

el-input-number 点击加减只能加一次

el-input-number 点击加减只能加一次 <el-input-number v-model"editForm.quantity" placeholder"请输入下单数量(店均)" change"quantityChangeFn"></el-input-number>需要在方法里面加 this.$forceUpdate() quantityChangeFn(val…

云数据中心运维新纪元:让Linux服务器如虎添翼

文章目录 一、Linux系统管理的高级技巧1. 性能调优与监控&#xff1a;2. 自动化与脚本编写&#xff1a;3. 文件系统与存储管理&#xff1a; 二、服务器配置优化的策略1. 硬件选型与配置&#xff1a;2. 网络配置与优化&#xff1a;3. 应用部署与调优&#xff1a; 三、安全策略的…

当心!不要在SpringBoot中再犯这样严重的错误

1. 简介 在Spring Boot中&#xff0c;Configuration注解用于声明配置类&#xff0c;以定义和注册Bean对象。这些Bean对象可以是普通的业务组件&#xff0c;也可以是特殊的处理器&#xff0c;如BeanPostProcessor或BeanFactoryPostProcessor&#xff0c;用于在Spring容器中对其…

数据库的存储过程

数据库的存储过程 文章目录 数据库的存储过程一、定义二、最简单的存储过程&#xff08;无传入参数无返回参数的存储过程&#xff09;三、需求一四、需求二五、需求三六、删除存储过程 一、定义 存储过程是一种数据库对象&#xff0c;它封装了一组 SQL 语句和逻辑操作&#xf…

C++修饰符类型

一、存储类运算符 auto&#xff08;自动存储类&#xff0c;但在现代C中&#xff0c;它通常用于自动类型推导&#xff09; register&#xff08;建议编译器将变量存储在寄存器中&#xff0c;但现代编译器通常忽略此关键字&#xff09; static&#xff08;静态存储类&#xff…

【ARMv8/v9 GIC 系列 5.2 -- GIC 分组介绍:Group 0 |Group 1| Non-Secure Group 1】

请阅读【ARM GICv3/v4 实战学习 】 文章目录 GIC Interrupt grouping中断分组配置寄存器GIC 中断分组介绍Group 0(安全组0)Group 1(安全组1)Non-Secure Group 1(非安全组1)总结及例子GIC Interrupt grouping ARM GICv3 通过中断分组机制,与ARMv8异常模型和安全模型进行…