侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

crond实现邮件告警

2023-12-22 星期五 / 0 评论 / 0 点赞 / 159 阅读 / 3720 字

实验环境:centos 6.8 所需软件:mailx或msmtp或smtpEmail等 smtp客户端程序 所需帐号:我这使用的是163邮箱。 本方案优点:安装软件少,无须启动postfix等邮件服

实验环境:centos 6.8

所需软件:mailx或msmtp或smtpEmail等 smtp客户端程序

所需帐号:我这使用的是163邮箱。

 

本方案优点:安装软件少,无须启动postfix等邮件服务。无须配置postfix邮件服务。由于调用的是注册邮箱,所以也不会给移入到垃圾邮件中。 

建议:生产中,不管是什么服务发送邮件的建议使用外部smtp帐号,不会导致移入到垃圾邮件列表中。

 

需求环境:由于我们线上脚本过多,而且也没有报警警告,所以无法获取其执行情况。导致最后老板发现,结果懂的。

然后与开发沟通,运维这边无法保证脚本的逻辑性错误,只能保证代码是否执行。代码逻辑性错误需要在脚本中判断并STDERR输出。

 

我是安装的mailx来实现的,过程简单。

安装mailx:yum -y install mailx

安装完成后会生成mail命令。

执行一次mail命令会生成 /etc/mail.rc 文件。

 

编辑/etc/mail.rc    在最后一行添加

 
  1. set [email protected]
  2. set smtp=smtp.ym.163.com
  3. set [email protected]
  4. set smtp-auth-password=PASSWORD
  5. set smtp-auth=login

 

测试是否正常收发邮件

echo "123456" | mail -s "报警" [email protected]

如果正常,那么就会收到一份邮件

 

配置脚本:

 
  1. mv /usr/sbin/sendmail{,.bak}
  2. vim /usr/sbin/sendmail
  3. #!/bin/bash
  4. #
  5. MAIL=`cat -`
  6. echo $MAIL | mail -s "警告" [email protected]

 

配置完成。

 

测试:

 
  1. crontab -e
  2. */1 * * * * echo "1"

添加一行输出,那么1分钟后就可以收到报警邮件了。

 

 

原理:

crond计划任务执行任务后,标准输出,错误输出都会输入到屏幕。

如果定义了MAILTO变量(在/etc/crontab已经定义),就会调用/usr/sbin/sendmail发送邮件。

crond传递格式如下:

 
  1. From: root (Cron Daemon)
  2. To: root Subject:
  3. Cron <root@opsnote> echo "1" Content-Type: text/plain; charset=UTF-8
  4. Auto-Submitted: auto-generated
  5. X-Cron-Env: <LANG=en_US.UTF-8>
  6. X-Cron-Env: <SHELL=/bin/sh>
  7. X-Cron-Env: <HOME=/root>
  8. X-Cron-Env: <PATH=/usr/bin:/bin>
  9. X-Cron-Env: <LOGNAME=root>
  10. X-Cron-Env: <USER=root> 1

那个脚本的的作用就是截取这些内容,然后调用mail命令将这些内容发送出去。

所以,需要正确的内容重定向至文件或者/dev/null,错误的才输出出来告警。否则亲的邮箱就被轰炸了。

例:这样定义就OK,如果错误也输出到/dev/null就无法实现告警了。

 
  1. */1 * * * * l /root > /dev/null

 

 

思路提供完毕。希望能举一反三。

 

更多博客请移步:https://opsnote.com

广告 广告

评论区