linux自动微信发信息,Linux中使用Shell把报警信息发送至邮件和微信上

本文主要是介绍linux自动微信发信息,Linux中使用Shell把报警信息发送至邮件和微信上,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

创建企业微信报警

注册一个企业微信号

点击企业微信,进行企业注册。

006tNbRwgy1fx55h6p57sj318a13edk0.jpg

注册成功后会看到企业信息页面,把企业ID先记录下来,后面发送报警脚本里需要配置。

006tNbRwgy1fx595yecq1j31dq13kn1w.jpg

创建一个部门,专供发送报警用,并添加需要接收报警的成员

点击“通讯录”,再点击+号,选择添加部门

006tNbRwgy1fx5982ml38j30f809k3yw.jpg

把部门ID记录下来,后面配置web端用户报警媒介的收件人要用到。

006tNbRwgy1fx59a51pnwj30ms0g4abj.jpg

给刚创建的部门添加成员,可以直接添加成员也可以微信邀请,可以先将管理员微信添加进来。

新增一个第三方应用

点击应用与小程序-创建应用

006tNbRwgy1fx59d70jxyj31kw0tqgpt.jpg

可见范围那里选择刚才添加的那个部门。

将AgentId和Secret记录下来,发送脚本里需要配置

006tNbRwgy1fx59h3osjdj31fs0fmtb0.jpg

邮箱设置

配置mail.rc

cat >>/etc/mail.rc<

set [email protected] # 设置发件人信息,注:如果使用163邮箱,发件人信息必须设置和实际邮箱号一致,不然无法发送。

set smtp=smtp.163.com # 设置邮件服务器

set smtp-auth-user=‘175xxxxx5‘ # 设置验证用户名

set smtp-auth-password=‘12345678‘ # 设置验证密码

set smtp-auth=login # 可忽略

报警脚本

我在这里只是举个实例,具体的监控报警事件,请以实际为准。

如:在生产环境下批量检测Web服务是否正常,最多检查三次,并且发送相关邮件或微信报警信息。

以用户的形式发送信息,Shell代码如下:

# cat web_server_user.sh

#!/bin/bash

#定义脚本存放路径

path=/tmp/scripts

#定义邮件列表,以空格隔开

MAIL_GROUP="[email protected]"

#定义日志路径

LOG_FILE="/tmp/scripts/web_check.log"

###send message from weixin for monitoring###

CropID=‘wwxxxxxx061‘ # 企业ID(AgentId)

Secret=‘m-v-x6BxxxxxxxxxxxxXmQMfw‘

GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"

Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F \" ‘{print $10}‘)

PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"

#创建目录

[ ! -d "$path" ] && mkdir -p $path

#定义URL列表函数

function UrlList(){

cat >$path/domain.list<

http://blog.51cto.com/wutengfei

www.baidu.com

www.datagrand.com

http://blog.52cto.com/wutf

http://192.168.246.171

EOF

}

#定义检查URL函数

function CheckUrl(){

#初始化失败次数为0次

FAILCOUNT=0

#检查3次,定义for循环

for ((i=1;i<=3;i++))

do

#定义具体的访问URL命令,不输出信息

wget -T 5 --tries=1 --spider $1 >/dev/null 2>&1

if [ $? -ne 0 ];then

let FAILCOUNT+=1

else

##返回值是0,则表示访问URL成功,跳出for循环,不做3次检测了

break

fi

done

##将失败次数作为返回值,返回函数外的脚本中

return $FAILCOUNT

}

#定义邮件函数

function Mail(){

local SUBJECT_CONTENT=$1

for MAIL_USER in $(echo $MAIL_GROUP)

do

#发送邮件

mail -s "${SUBJECT_CONTENT}" ${MAIL_USER} < ${LOG_FILE}

done

}

#定义微信函数

function WeiXin(){

local int AppID=1000002 # 企业号中的应用id

#local UserID="${cat $path/weixin_user.txt}" # 部门成员id,企业微信中定义的微信接收者

local UserID="@all" # 企业微信APP中的全部报警用户

#local PartyID=$2 # 部门id,定义了范围,组内成员都可接收到消息

local Msg=$(cat ${LOG_FILE}) # 过滤出企业微信中传递的第三个参数

printf ‘{\n‘

# printf ‘\t"touser": "‘$UserID‘",\n‘

printf ‘\t"touser": "‘"$UserID"\","\n"

#printf ‘\t"toparty": "$PartyID",\n‘

printf ‘\t"msgtype": "text",\n‘

printf ‘\t"agentid": "‘$AppID‘",\n‘

printf ‘\t"text": {\n‘

##printf ‘\t\t"content": "‘$Msg‘"\n‘

printf ‘\t\t"content": "‘"$Msg"\""\n"

printf ‘\t},\n‘

printf ‘\t"safe":"0"\n‘

printf ‘}\n‘

}

#定义发送信息函数

function SendMsg(){

if [ $1 -ge 3 ];then

RETVAL=1

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

SUBJECT_CONTENE="$2 is error,${NOW_TIME}."

echo -e ${SUBJECT_CONTENE}|tee ${LOG_FILE}

#发送邮件报警

Mail ${SUBJECT_CONTENE}

#发送微信报警

#for $weixin in $(cat $path/weixin_user.txt)

#do

curl --data-ascii "$(WeiXin)" $PURL

printf ‘\n‘

echo "over!"

# done

else

echo "http://$2 is ok"

RETVAL=0

fi

return $RETVAL

}

#定义主函数

function main(){

UrlList

for url in $(cat $path/domain.list)

do

CheckUrl $url

SendMsg $? $url

done

}

main

以用户组的形式发送信息,Shell代码如下:

cat web_server_group.sh

#!/bin/bash

#定义脚本存放路径

path=/tmp/scripts

#定义邮件列表,以空格隔开

MAIL_GROUP="[email protected]"

#定义日志路径

LOG_FILE="/tmp/scripts/web_check.log"

###send message from weixin for monitoring###

CropID=‘wwxxxxxxxxx8061‘

Secret=‘m-v-xxxxxxxxxxxxxxxXmQMfw‘

GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"

Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F \" ‘{print $10}‘)

PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"

#创建目录

[ ! -d "$path" ] && mkdir -p $path

#定义URL列表函数

function UrlList(){

cat >$path/domain.list<

http://blog.51cto.com/wutengfei

www.baidu.com

www.datagrand.com

http://blog.52cto.com/wutf

http://192.168.246.171

EOF

}

#定义检查URL函数

function CheckUrl(){

#初始化失败次数为0次

FAILCOUNT=0

#检查3次,定义for循环

for ((i=1;i<=3;i++))

do

#定义具体的访问URL命令,不输出信息

wget -T 5 --tries=1 --spider $1 >/dev/null 2>&1

if [ $? -ne 0 ];then

let FAILCOUNT+=1

else

##返回值是0,则表示访问URL成功,跳出for循环,不做3次检测了

break

fi

done

##将失败次数作为返回值,返回函数外的脚本中

return $FAILCOUNT

}

#定义邮件函数

function Mail(){

local SUBJECT_CONTENT=$1

for MAIL_USER in $(echo $MAIL_GROUP)

do

#发送邮件

mail -s "${SUBJECT_CONTENT}" ${MAIL_USER} < ${LOG_FILE}

done

}

#定义微信函数

function WeiXin(){

local int AppID=1000002 # 企业号中的应用id

#local UserID="${cat $path/weixin_user.txt}" # 部门成员id,企业微信中定义的微信接收者

#local UserID="@all" # 企业微信APP中的全部报警用户

local PartyID=4 # 部门id,定义了范围,组内成员都可接收到消息

local Msg=$(cat ${LOG_FILE}) # 过滤出企业微信中传递的第三个参数

printf ‘{\n‘

printf ‘\t"touser": "‘"$UserID"\","\n"

printf ‘\t"toparty": "‘"$PartyID"\","\n"

printf ‘\t"msgtype": "text",\n‘

printf ‘\t"agentid": "‘$AppID‘",\n‘

printf ‘\t"text": {\n‘

##printf ‘\t\t"content": "‘$Msg‘"\n‘

printf ‘\t\t"content": "‘"$Msg"\""\n"

printf ‘\t},\n‘

printf ‘\t"safe":"0"\n‘

printf ‘}\n‘

}

#定义发送信息函数

function SendMsg(){

if [ $1 -ge 3 ];then

RETVAL=1

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

SUBJECT_CONTENE="$2 is error,${NOW_TIME}."

echo -e ${SUBJECT_CONTENE}|tee ${LOG_FILE}

#发送邮件报警

Mail ${SUBJECT_CONTENE}

#发送微信报警

#for $weixin in $(cat $path/weixin_user.txt)

#do

curl --data-ascii "$(WeiXin)" $PURL

printf ‘\n‘

echo "over!"

# done

else

echo "http://$2 is ok"

RETVAL=0

fi

return $RETVAL

}

#定义主函数

function main(){

UrlList

for url in $(cat $path/domain.list)

do

CheckUrl $url

SendMsg $? $url

done

}

main

报警测试

微信报警截图

006tNbRwgy1fx5c7sfu16j30ng0nidkm.jpg

邮件报警截图

006tNbRwgy1fx5cir5itkj30h206mq3p.jpg

设置定时任务

# crontab -l

*/3 * * * * /bin/sh /tmp/web_server_group.sh &>/dev/null # 每隔三分钟检查一次

原文:http://blog.51cto.com/wutengfei/2315884

这篇关于linux自动微信发信息,Linux中使用Shell把报警信息发送至邮件和微信上的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/223868

相关文章

Linux搭建单机MySQL8.0.26版本的操作方法

《Linux搭建单机MySQL8.0.26版本的操作方法》:本文主要介绍Linux搭建单机MySQL8.0.26版本的操作方法,本文通过图文并茂的形式给大家讲解的非常详细,感兴趣的朋友一起看看吧... 目录概述环境信息数据库服务安装步骤下载前置依赖服务下载方式一:进入官网下载,并上传到宿主机中,适合离线环境

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT

Python中Flask模板的使用与高级技巧详解

《Python中Flask模板的使用与高级技巧详解》在Web开发中,直接将HTML代码写在Python文件中会导致诸多问题,Flask内置了Jinja2模板引擎,完美解决了这些问题,下面我们就来看看F... 目录一、模板渲染基础1.1 为什么需要模板引擎1.2 第一个模板渲染示例1.3 模板渲染原理二、模板

浅析如何使用xstream实现javaBean与xml互转

《浅析如何使用xstream实现javaBean与xml互转》XStream是一个用于将Java对象与XML之间进行转换的库,它非常简单易用,下面将详细介绍如何使用XStream实现JavaBean与... 目录1. 引入依赖2. 定义 JavaBean3. JavaBean 转 XML4. XML 转 J

使用Python创建一个功能完整的Windows风格计算器程序

《使用Python创建一个功能完整的Windows风格计算器程序》:本文主要介绍如何使用Python和Tkinter创建一个功能完整的Windows风格计算器程序,包括基本运算、高级科学计算(如三... 目录python实现Windows系统计算器程序(含高级功能)1. 使用Tkinter实现基础计算器2.

在.NET平台使用C#为PDF添加各种类型的表单域的方法

《在.NET平台使用C#为PDF添加各种类型的表单域的方法》在日常办公系统开发中,涉及PDF处理相关的开发时,生成可填写的PDF表单是一种常见需求,与静态PDF不同,带有**表单域的文档支持用户直接在... 目录引言使用 PdfTextBoxField 添加文本输入域使用 PdfComboBoxField

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设