shell实战三案例

该博客介绍了三个Linux shell脚本案例,用于自动化监控服务器。案例一检测磁盘使用率并根据阈值发送邮件;案例二检查网站HTTP状态码并报告异常;案例三在文件删除前进行备份,防止误删。这些脚本通过邮件服务发送报警,确保运维人员能及时了解服务器和应用的健康状况。
摘要由CSDN通过智能技术生成

环境

  • 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%" 2418993252@qq.com

        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" 2418993252@qq.com
        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" 2418993252@qq.com
        else
                echo "$url is error"|mail -s "url_错误info" 2418993252@qq.com
        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三案例到此结束~ _ ~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值