Linux中使用Shell把報警信息發送至郵件和微信上
阿新 • • 發佈:2018-11-12
剛才 企業號 part null 成功 直接 xxxxxx 新增 tee Linux中使用Shell把報警信息發送至郵件和微信上
創建企業微信報警
註冊一個企業微信號
點擊企業微信,進行企業註冊。
註冊成功後會看到企業信息頁面,把企業ID先記錄下來,後面發送報警腳本裏需要配置。
創建一個部門,專供發送報警用,並添加需要接收報警的成員
點擊“通訊錄”,再點擊+號,選擇添加部門
把部門ID記錄下來,後面配置web端用戶報警媒介的收件人要用到。
給剛創建的部門添加成員,可以直接添加成員也可以微信邀請,可以先將管理員微信添加進來。
新增一個第三方應用
點擊應用與小程序-創建應用
可見範圍那裏選擇剛才添加的那個部門。
將AgentId和Secret記錄下來,發送腳本裏需要配置
郵箱設置
配置mail.rc
cat >>/etc/mail.rc<<EOF
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<<EOF 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<<EOF
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
報警測試
微信報警截圖
郵件報警截圖
設置定時任務
# crontab -l
*/3 * * * * /bin/sh /tmp/web_server_group.sh &>/dev/null # 每隔三分鐘檢查一次
Linux中使用Shell把報警信息發送至郵件和微信上