您的位置:首页 > 其它

检测环境中是否有core文件并自动发送邮件通知

2017-08-10 14:34 543 查看
最近遇到几次测试人员间隔好些天发现环境中出现了core文件,因为时间太长导致版本和相关信息缺失的情况,因此想到写一个脚本用于监控环境中core文件的产生,并发及时发送邮件告警。

脚本如下:

#########################################################################
# File Name: check_core.sh
# Author: liuhj
# mail: 805577846@qq.com
# Created Time: Tue 08 Aug 2017 11:10:34 AM CST
#########################################################################
#!/bin/bash
mail_config_file="/root/.muttrc"
mail_content="./mailcontent"
if [ ! -f "$mail_config_file" ]; then
touch "$mai l_config_file"
chmod 777 $mail_config_file
echo "set envelope_from=yes">>$mail_config_file
echo "set from=checkcore@sina.cn">>$mail_config_file
echo "set realname=\"checkcore\"">>$mail_config_file
echo "set use_from=yes">>$mail_config_file
echo "set rfc2047_parameters=yes">>$mail_config_file
echo " set charset=\"utf-8\"">>$mail_config_file
else
sed -i 's/se t from.*/set from=checkcore@sina.cn/' $mail_config_file
sed -i 's/.*realname.*/set realname="checkcore"/' $mail_config_file
fi

if [ -f "$mail_content" ]; then
rm -f "$mail_content"
#chmod 777 "$mail_content"
fi

DIR="/home/core/"

if [ ! -d "$DIR" ]; then
echo " create core dir"
mkdir -p "$DIR"
fi

core_num=`ls /root/ | grep ^core. | wc -l`
core_file=`ls /root/ | grep ^core.`
if [ "$core_num" -gt 0 ]; then
#echo "core_nume:$core_num"
#echo "core_file:$core_file"
cd /root/
tmp=`pwd`
echo "pwd:$tmp"
echo "core_file:$core_file DIR:$DIR"
mv -f $core_file $DIR
echo $?
touch "$mail_content"
chmod 777 "$mail_content"
#date >> $mail_content
echo "hi," >>$mail_content
echo "you got core files on server">>$mail_content
server_ip=`ifconfig|grep 'inet addr'|grep -v '127.0.0.1'|cut -d: -f2 |awk '{print $1}'`
echo "server ip:$server_ip">>$mail_content
#date >> $mail_content
echo "core files had been moved to /home/core">>$mail_content
#date >> $mail_content
echo "file name:$core_file">>$mail_content
cat mailcontent | mail -s "core file check" liuhj@chinanetcenter.com
fi用的linux自带的mail命令来发送邮件,但是中间遇到很多问题,邮件无法发送

core文件检查脚本使用

环境准备

1.安装sendmail
rpm -q sendmail检查是否安装sendmail
如果没有安装,执行yum install sendmail -y进行安装

2.修改本地hostname为域名形式(防止发送邮件被识别为垃圾邮件)
修改/etc/hosts文件,将127.0.0.1对应的那条配置注释掉,增加类似下面的配置
127.0.0.1 aa.com
统一/etc/sysconfig/network文件中HOSTNAME配置
HOSTNAME=aa.com
执行hostname aa.com生效配置

3.将配置的域名写入/etc/mail/local-host-names文件
aa.com

4.修改/etc/mail/sendmail.cf
将 
O DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA
替换为
O DaemonPortOptions=Port=smtp,Addr=0.0.0.0, Name=MTA

5.重启sendmail
service sendmail restart

脚本使用

1.下载或上传脚本check_core.sh到本地环境(example: /home/)

2.如果脚本权限不够,给脚本增加执行权限,chmod +x /home/check_core.sh

3.crontab定时执行脚本
crontab -e编辑定时任务,增加如下命令(每五分钟检查一次)
*/5 * * * * /home/check_core.sh > /dev/null 2>&1

4.修改发送目标,脚本中找到cat mailcontent这行,修改邮箱地址
cat mailcontent | mail -s "core file check" liuhj@chinanetcenter.com

5.增加抄送人员
步骤4中的命令后面增加 -c 抄送人员邮箱地址

注意事项:

1.sendmail锁住导致无法使用
[root@DB-Server ~]# service sendmail status
sendmail dead but subsys locked
sm-client (pid  22112) is running...
原因是postfix冲突,将postfix关闭即可解决

2.sendmail的执行日志记录在/var/log/maillog中,可以通过这个日志来确认执行的状态
如果日志停止记录,可能是因为syslog导致
[root@localhost script]# ps -ef | grep syslog
root      1138     1  0 Aug07 ?        00:00:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
root     42202 24311  0 11:06 pts/3    00:00:00 grep syslog
解决:
kill -9 1138
/sbin/rsyslogd -i /var/run/syslogd.pid -c 5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐