脚本如下
#!/usr/bin/env python3 import json,requests,sys,datetime,os # 日志路径 Log_Path='/tmp/History.log' # access_token路径 access_token_path='/tmp/access_token' # 日志文件 Logfile=open(Log_Path,'a',encoding="utf-8") # 企业ID corpid='' # 应用ID agentid=1000002 # 应用密匙 corpsecret='' # 脚本接收参数 text=sys.argv[1] # 发送信息函数 def Send_Messge(corpid,corpsecret,agentid,text): # 检测网络状态 Network_status=Network_Test() if Network_status==0: Logfile.write(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")+' 网络通信正常\n') else: Logfile.write(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")+' 网络通信失败\n') try: # 获取文件信息 access_token_file=os.stat("access_token") # 获取文件修改时间 File_mtime=access_token_file.st_mtime # 判断access_token有效时间 Exp_Time=datetime.datetime.fromtimestamp(File_mtime)+datetime.timedelta(hours=2) # 如果当前时间小于有效时间,则直接在文件获取access_token if datetime.datetime.now()<Exp_Time: access_token=open(access_token_path,'r',encoding='utf-8').read() else: # 如何当前时间大于文件修改时间,则执行获取函数重新获取 access_token=Get_Access_Token() except: # 当无法读取临时文件,则创建新的token及文件 access_token=Get_Access_Token() # 通过API发送信息至企业微信 Put_Url="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="+access_token data={'touser': '@all', 'msgtype': 'text', 'agentid': agentid, 'text': {'content': text}, 'safe': 0} Response_Code=requests.post(Put_Url,json.dumps(data)) if Response_Code.status_code==200: return 0 else: return 1 #网络检测函数,通过函数来检测本地同企业微信接口的通信状态,正常返回0,异常返回1 def Network_Test(): try: url_obj=requests.get('https://qyapi.weixin.qq.com/') return 0 except: return 1 # 通过API获取access_token def Get_Access_Token(): Get_Access_Token_Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpid + "&corpsecret=" + corpsecret access_token = json.loads(requests.get(Get_Access_Token_Url).text)['access_token'] # 将access_token写入临时文件 access_token_file = open(access_token_path, 'w', encoding="utf-8") access_token_file.write(access_token) return access_token # 执行发送信息函数 Logfile.write(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")+' ----------开始发送信息--------\n') Logfile.write(text) Res=Send_Messge(corpid,corpsecret,agentid,text) if Res==0: Logfile.write(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")+' 信息发送成功\n') else: Logfile.write(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")+' 信息发送失败\n') Logfile.write(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")+' ----------结束信息发送--------\n')
注意事项
在使用Linux时,报警脚本路径需要在/tmp目录下,其它目录测试没有写入权限,导致脚本异常。
2021年7月26日10:39:56
评论区