环境
- centos 7.5
- 邮件服务配置完成
邮件配置可参考如下
linux下使用自带mail发送邮件(超简单)
案例一
案例目标
- 检测服务器系统版本号同时截取本机IP
- 主线任务:检测服务器磁盘使用率是否大于小于15%
- 无论大于15%还是小于%15都需要第一时间发送邮件到qq邮箱
- 案例的意义:我们运维工程师最重要的一点就是保证服务器的正常运行,磁盘当然是服务器是否正常运行的必备保障,当硬盘的可用空间小到一定程度时,就会造成系统的交换文件、临时文件缺乏可用空间,降低了系统的运行效率,所以监控磁盘就成了运维人员所必须掌握的一门小知识
#!/bin/bash
#系统版本号
os_version=$(cat /etc/redhat-release)
echo "系统版本号是:${os_version}"
#本机服务器IP地址
ip_addr=$(ifconfig ens33 |awk '/netm/{print $2}')
echo "本机服务器IP地址是:${ip_addr}"
#磁盘使用率>15%
gt_15=($(df -TH |awk -F '[ |%]+' '/xfs/{
if($6>15)print $1}'))
for i in ${gt_15[@]}
do
echo "disk used is gt 15%"|mail -s "disk>15%" [email protected]
done
#磁盘使用率<15%
lt_15=($(df -TH |awk -F '[ |%]+' '/xfs/{
if($6<15)print $1}'))
for i in ${lt_15[@]}
do
echo "disk used is lt 15"|mail -s "disk is ok" [email protected]
done
案例二
案例目标 可参考HTTP状态码
- 判断一个网站的状态码,并截取状态码
- 判断状态码是否为200
- url为对应的网址
- 测试正确网址可以使用www.baidu.com
- 异常网址可以用www.linuxpm.com
#!/bin/bash
url=(www.baidu.com www.linuxpm.com)
for url in ${url[@]}
do
result=$(curl -I -o /dev/null -s -w %{
http_code} $url)
:<<`!`
-I:http头部信息
-o:输出到指定位置
-s:屏蔽输出
-w:定制输出格式
`!`
if [ $result -eq 200 ];then
echo "$url is ok"|mail -s "url_健康info" [email protected]
else
echo "$url is error"|mail -s "url_错误info" [email protected]
fi
done
案例三
案例目标 : 防止文件被误删除
案例导图 :在代码下方
#!/bin/bash
while true
do
read -ep "输入您要删除的文件:<<" file
echo "您要删除的文件是: $file"
read -p "您确定要删除吗?Y/y|N/n:<<" cmd1
case $cmd1 in
Y|y)
if [ -e $file ];then
count=$(rpm -qa |grep rsync|wc -l)
if [ $count -ne 0 ];then
echo "rsync已经安装"
else
echo "rsync未安装,即将安装"
yum -y install rsync &> /dev/null
echo "rsync安装完成"
fi
echo "判断服务rsync是否运行"
netstat -nltp|grep 873 &> /dev/null
if [ $? -eq 0 ];then
echo "rsync服务已运行"
else
echo "rsync服务未运行,即将运行"
systemctl start rsyncd &> /dev/null
echo "rsync服务运行成功"
fi
#开始备份文件
backup_dir="/usr/local/src/backup"
[ -d ${backup_dir} ] || mkdir ${backup_dir}
case $cmd1 in
Y|y)
if [ -e $file ];then
count=$(rpm -qa |grep rsync|wc -l)
if [ $count -ne 0 ];then
echo "rsync已经安装"
else
echo "rsync未安装,即将安装"
yum -y install rsync &> /dev/null
echo "rsync安装完成"
fi
echo "判断服务rsync是否运行"
netstat -nltp|grep 873 &> /dev/null
if [ $? -eq 0 ];then
echo "rsync服务已运行"
else
echo "rsync服务未运行,即将运行"
systemctl start rsyncd &> /dev/null
echo "rsync服务运行成功"
fi
#开始备份文件
backup_dir="/usr/local/src/backup"
[ -d ${backup_dir} ] || mkdir ${backup_dir}
#开始执行备份操作
rsync -av $file ${backup_dir}
echo "input Y:<< delete"
echo "input y:<< no delete"
read -p "您真的狠心删除我吗?(Y|y):<<" cmd2
case $cmd2 in
Y)
echo "start delete $file"
rm -rf $file
echo "文件恢复路径:<< ${backup_dir}"
;;
y)
echo "no delete"
echo "就知道您不会抛弃我的~_~"
exit
;;
esac
else
echo "start touch $file"
touch $file
echo "show $file"
ls -l $file
exit
fi
;;
N|n)
echo "no delete $file"
echo "退出"
exit
;;
esac
done
防止误删除文件思维导图
shell三案例到此结束~ _ ~