#!/bin/bash
# "/etc/mail.rc" 文件中添加邮箱的信息
# set from=123456@qq.com
# set smtp=smtp.qq.com
# set smtp-auth-user=123456@qq.com
# set smtp-auth-password=yourpasswd
# set smtp-auth=login
server_ip=`/usr/sbin/ip a | awk '/inet / {print $2}'|sed '2p' -n` #不要127的ip取第一个ip就可以了
time_now=`date +%F" "%H:%M`
send_mail () {
cat <<EOF | mail -s "服务器告警" 123456@qq.com
主机IP: $server_ip
${1}状态异常:
$2
请上线查看处理!
$time_now
EOF
}
service_check () {
system_service=(
nginx
mysql
tomcat
php
firewalld
)
failed_services=()
#数组接受失败的服务 不会一个服务发一条邮件 组合发送节约资源
for i in ${system_service[*]};
do
server_status=`ps -ef |grep $i |grep -Ev "$0|grep" |wc -l`
if [ $server_status -eq 0 ];
then
failed_services+=($i",")
fi
done
send_mail "系统服务" `printf '%s' "${failed_services[@]}"`
}
java_check () {
jar_files=(
'Example1.jar'
'Example2.jar'
'Example3.jar'
)
#变量接受的模式 将失败的服务循环赋值给$jar_failed
jar_failed=""
for i in ${jar_files[*]};
do
java_status=`ps -ef |grep $i |grep -Ev "$0|grep" |wc -l`
if [ $java_status -eq 0 ];
then
jar_failed="$jar_failed$i",""
fi
done
send_mail "java" "$jar_failed"
}
disk_check () {
# 磁盘检测
# 磁盘检测阈值定义(不要写单位)
disk_threshold='70'
#
disk_name=`df -h |awk -F"[ %]+" -v i=$disk_threshold '/^\/dev/{if($5>=i)printf"%s,",$1}'`
#printf"%s,",$1 --> markdown格式不认识空格用格式化输出为字符串用","作为多个磁盘的分隔符
if [ ! -z $disk_name ];
then
send_mail "系统" "${disk_name}使用率已经超过${disk_threshold}%"
fi
}
cpu_check () {
cpu_use=`top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}' |awk -F"[.]" '{print $1}'`
if [ $cpu_use -ge 70 ];
then
send_mail "系统" "Cpu使用率飙高已用${cpu_use}"%"" "请上线查看处理"
fi
}
service_check
java_check
disk_check
cpu_check
Shell脚本实现对服务器的监控并通过邮件进行告警
于 2023-06-19 13:08:51 首次发布