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线程同步/互斥过程详解

《Linux线程同步/互斥过程详解》文章讲解多线程并发访问导致竞态条件,需通过互斥锁、原子操作和条件变量实现线程安全与同步,分析死锁条件及避免方法,并介绍RAII封装技术提升资源管理效率... 目录01. 资源共享问题1.1 多线程并发访问1.2 临界区与临界资源1.3 锁的引入02. 多线程案例2.1 为

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Linux如何查看文件权限的命令

《Linux如何查看文件权限的命令》Linux中使用ls-R命令递归查看指定目录及子目录下所有文件和文件夹的权限信息,以列表形式展示权限位、所有者、组等详细内容... 目录linux China编程查看文件权限命令输出结果示例这里是查看tomcat文件夹总结Linux 查看文件权限命令ls -l 文件或文件夹