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

相关文章

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

pytorch自动求梯度autograd的实现

《pytorch自动求梯度autograd的实现》autograd是一个自动微分引擎,它可以自动计算张量的梯度,本文主要介绍了pytorch自动求梯度autograd的实现,具有一定的参考价值,感兴趣... autograd是pytorch构建神经网络的核心。在 PyTorch 中,结合以下代码例子,当你

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t