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

最近遇到几次测试人员间隔好些天发现环境中出现了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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值