对接sms和监控的脚本,其实原理很简单,zabbix会通过参数的方式传送给脚本三个参数
$1 user
$2 subject
$3 message_body
然后通过curl 通过get的方式提交网页就ok了。
#!/bin/bash
sms_UID=""
sms_passwd=""
sms_message=$3""
sms_mobilenum=$1
sms_URL="http://www.smsadmin.cn/smsmarketing/wwwroot/api/get_send/?"
sms_linkid=`date +%s%N `
sms_dtime=`date +%Y%m%d%H%M`
sms_message_gb2312=`echo $sms_message |iconv -f utf-8 -t GB2312 `
string=""$sms_URL"uid="$sms_UID"&pwd="$sms_passwd"&mobile="$sms_mobilenum"&msg="$sms_message_gb2312"&dtime="$sms_dtime"&linkid="$sms_linkid""
curl $string
对接邮件和监控的脚本,原理同上不同的是这个通过邮件发送
#!/bin/bash
smtp_server=''
from_email_addr=''
to_email_addr=$1
message_subject=$2
message_body=$3
sendEmail='/usr/local/bin/sendEmail'
message_subject_gb2312=`iconv -t GB2312 -f UTF-8 << EOF
$message_subject
EOF`
message_body_gb2312=`iconv -t GB2312 -f UTF-8 << EOF
$message_body
EOF`
$sendEmail -s "$smtp_server" -f "$from_email_addr" -t "$to_email_addr" -u "$message_body" -m "$message_body"
这里面涉及到转码的问题,linux下默认的文字编码是utf-8 但是在中国绝大部分编码是GB2312
使用iconv转码,可以使用iconv -l 查看所有支持的编码方式
如果需要转码的是字符串则
echo "str" | iconv -f utf-8 -t GB2312
即可,
如果需要转码的是文件,则
iconv -f utf-8 -t gb2312 file
今天实际使用了一下上面的短信脚本,发现根本就不能用,一个是短信平台有短信内容要求,需要在全文的后面加签名,还有需要信息为gb2312编码。
首先解决签名问题,在脚本后面加【云科技】,就像上面的脚本一样。结果怎么都不行,再一查字符编码不对,linux默认的是utf-8编码,发送到网站以后
直接就乱码了当然也就发布出去了。
然后就有了下面的这个脚本,将签名放在监控软件中而不是放在脚本中,这样就能统一至少又监控发送过来的参数是统一的utf-8编码
#!/bin/bash
sms_UID="user"
sms_passwd="pwd"
sms_message=$3
sms_mobilenum=$1
sms_URL="http://www.smsadmin.cn/smsmarketing/wwwroot/api/get_send_urldecode/?"
sms_linkid=`date +%s%N `
sms_dtime=`date +%Y%m%d%H%M`
echo $sms_message"`date`">>/tmp/log
<pre name="code" class="plain">sms_message_gb2312="`echo $sms_message |iconv -f utf-8 -t GB2312|tr -d '\n' `"
sms_message_urlcode="`echo "$sms_message_gb2312" | tr -d '\n' |xxd -plain |sed 's/\(..\)/%\1/g'|tr -d '\n'`"
string="uid="$sms_UID"&pwd="$sms_passwd"&mobile="$sms_mobilenum"&msg="$sms_message_urlcode"&dtime="$sms_dtime"&linkid="$sms_linkidcurl "$sms_URL$string"
解释一下,首先将监控传送过来的参数接收放在sms_message sms_mobilnum中,
需要提交的数据一共有6个即短信平台UID,passwd,需要发送的电话号码sms_mobilnum,信息主体sms_message,发送时间dtime和发送序列号sms_linkid
将接收过来的信息主体进行编码转换又utf-8转为gb2312 并且删除所有换行符。
sms_message_gb2312="`echo $sms_message |iconv -f utf-8 -t GB2312|tr -d '\n' `"
再将转换后的信息进行url编码
sms_message_urlcode="`echo "$sms_message_gb2312" | tr -d '\n' |xxd -plain |sed 's/\(..\)/%\1/g'|tr -d '\n'`"
其实url编码的原理很简单,删除所有换行后,将字符序列转换为16进制序列,然后在每两个字符中间插入%即可。
这个监控的脚本任务算是完事了,鼓捣好几天,另utf-8 编码是所有字符编码的超集国际通用。但是因为其字符数量不如gb2312 和gbk 多,
所以国内用的绝大部分是gb2312
2016.01.06 更新发送邮件脚本python版
#!/usr/bin/python
# -*- coding: utf-8 -*-
import smtplib
from email.mime.text import MIMEText
import sys
content=sys.argv[3]
subject=sys.argv[2]
mailto=[sys.argv[1]]
mail_host='smtp.xxxx.com'
user='user'
passwd='pas'
msg = MIMEText(content,_subtype='plain',_charset='utf8')
msg['Subject'] = subject
msg['From'] = 'ali-warn@neusoft.com'
msg['To'] = ";".join(mailto)
send = smtplib.SMTP(mail_host,25)
send.starttls()
send.ehlo()
send.login(user,passwd)
send.sendmail('sender@xxx.com',mailto,msg.as_string())
send.close()
life is short ,i use python!!!
life is short ,i use python!!!
life is short ,i use python!!!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)