Ps: 完美的解决了python传入参数带有回车换行符,不换行问题。修改本文时间:2010年12月21号,脚本有变动·nagios commands.cfg无需修改·用了此版本·就解决了不用去读文本方式。
安装好nagios后,一直利用nagios服务器上的sendmail服务器去发邮件,修改配置文件可以伪造别的邮件地址发邮件,但是一直会被邮局视为垃圾邮件,我把email地址加在了QQ上,好处是一来邮件QQ右下角会弹提示。工作时间会第一时间知道服务器出状况(手机短信暂时不提),但是如果是垃圾邮件,QQ不会提醒的,当然可以在QQ邮箱把其添加为信任邮局,可以避免。我就不那么浪费时间了。自己写一个发邮件的插件来替换掉本机的sendmail服务,可以为服务器节省资源,大家也知道启动sendmail服务稍稍费点时间,如果主机名没有设置好的话sendmail服务会启动很久才能起来的哦。废话不多说了,发源代码。
nagios $> cat /usr/local/nagios/libexec/sendmail
#!/usr/bin/python import smtplib import string import sys import getopt def usage(): print """sendmail is a send mail Plugins Usage: sendmail [-h|--help][-t|--to][-s|--subject][-m|--message] Options: --help|-h) print sendmail help. --to|-t) Sets sendmail to email. --subject|-s) Sets the mail subject. --message|-m) Sets the mail body Example: only one to email user ./sendmail -t 'eric@nginxs.com' -s 'hello eric' -m 'hello eric,this is sendmail test! many to email user ./sendmail -t 'eric@nginxs.com,yangzi@nginxs.com,zhangsan@nginxs.com' -s 'hello eric' -m 'hello eric,this is sendmail test!""" sys.exit(3) try: options,args = getopt.getopt(sys.argv[1:],"ht:s:m:",["help","to=","subject=","message="]) except getopt.GetoptError: usage() for name,value in options: if name in ("-h","--help"): usage() if name in ("-t","--to"): # accept message user TO = value TO = TO.split(",") if name in ("-s","--title"): SUBJECT = value if name in ("-m","--message"): MESSAGE = value MESSAGE = MESSAGE.split('\\n') MESSAGE = '\n'.join(MESSAGE) #smtp HOST HOST = "smtp.126.com" #改为你的邮局SMTP 主机地址 #smtp port PORT = "25" #改为你的邮局的SMTP 端口 #FROM mail user USER = 'eric' # 改为你的邮箱用户名 #FROM mail password PASSWD = '123456' # 改为你的邮箱密码 #FROM EMAIL FROM = "yangzi2008@126.com" # 改为你的邮箱 email try: BODY = string.join(( "From: %s" % FROM, "To: %s" % TO, "Subject: %s" % SUBJECT, "", MESSAGE),"\r\n") smtp = smtplib.SMTP() smtp.connect(HOST,PORT) smtp.login(USER,PASSWD) smtp.sendmail(FROM,TO,BODY) smtp.quit() except: print "UNKNOWN ERROR" print "please look help" print "./sendmail -h"
使用方法:
只给一个用户发:
nagios $> ./sendmail -t 'eric@nginxs.com' -s 'hello eric' -m 'hello eric,this is sendmail test!
给多个用户发:
./sendmail -t 'eric@nginxs.com,yangzi@nginxs.com,zhangsan@nginxs.com' -s 'hello eric' -m 'hello eric,this is sendmail test!
如果利用在nagios 上修改 commands.cfg
# 还为测试·马上就测试。怕的是换行符有问题·
nagios $> vim /usr/local/nagios/etc/objects/commands.cfg
define command{ command_name notify-host-by-email command_line $USER1$/sendmail -t $CONTACTEMAIL$ -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" -m "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" } define command{ command_name notify-service-by-email command_line $USER1$/sendmail -t $CONTACTEMAIL$ -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" -m "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" }
有图有真相:
本文转自Deidara 51CTO博客,原文链接:http://blog.51cto.com/deidara/461008,如需转载请自行联系原作者