【shell脚本实战学习笔记】#2

本文介绍了一个用于Linux服务器的Shell脚本,用于自动检查Web服务器进程、监控磁盘空间、备份日志并生成系统健康报告。脚本具有错误处理、通知机制和定时执行功能,以提高运维效率并预防服务中断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景描述

你负责一个Web应用的运维工作,该应用部署在一组Linux服务器上。你需要编写一个Shell脚本来自动化以下任务:

检查Web服务器进程: 确保Web服务器(例如Apache或Nginx)正常运行。如果没有运行,则尝试重启服务。
监控磁盘空间: 检查应用服务器的根分区磁盘空间使用情况,如果使用超过85%,则发送警报。
备份日志文件: 将/var/log目录下的日志文件压缩并移动到备份目录,同时保留最近7天的日志。
系统健康报告: 生成一个包含服务器的CPU使用率、内存使用情况、磁盘空间和当前运行的Web服务器进程数量的报告。

Shell脚本需求

健壮性: 脚本在执行各项任务时应检查潜在的错误,例如磁盘空间不足、服务无法启动等,并相应地处理这些错误。
通知机制: 当发现重要问题(如服务停止、磁盘空间过高)时,脚本应发送通知到预设的管理员邮箱或通过其他通讯工具。
日志记录: 脚本执行的所有操作都应该有日志记录,便于事后审计和故障排查。
定时执行: 该脚本应配置为定时任务,例如每天执行一次。

这个脚本不仅可以帮助自动化日常运维任务,提高工作效率,还能及时发现并处理潜在的问题,避免可能的服务中断。

#初版脚本:

#!/bin/bash

# 配置部分
web_service='nginx' # 你的Web服务名称,比如apache或nginx
backup_dir='/path/to/backup' # 日志备份目录
admin_email='admin@example.com' # 管理员邮箱

# 发送通知
send_notification() {
    subject=$1
    message=$2
    # 使用mail命令发送邮件,也可以替换成其他通知方式
    echo "$message" | mail -s "$subject" $admin_email
}

# 检查Web服务
check_web_service() {
    if systemctl is-active --quiet $web_service; then
        echo "Web服务正在运行"
    else
        echo "Web服务未运行,尝试启动..."
        systemctl start $web_service
        if [ $? -ne 0 ]; then
            send_notification "Web服务启动失败" "尝试启动$web_service失败,请立即检查!"
        fi
    fi
}

# 监控磁盘空间
monitor_disk_space() {
    usage=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
    if [ $usage -ge 85 ]; then
        send_notification "磁盘空间警告" "根分区磁盘使用率已达$usage%,请及时清理。"
    fi
}

# 备份日志文件
backup_logs() {
    tar czf $backup_dir/log-$(date +%Y%m%d).tar.gz /var/log
    find $backup_dir -type f -name 'log-*.tar.gz' -mtime +7 -exec rm {} \;
}

# 系统健康报告
system_health_report() {
    cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
    mem_usage=$(free -m | awk 'NR==2{printf "%.2f%%", $3*100/$2 }')
    disk_usage=$(df -h / | awk 'NR==2 {print $5}')
    web_proc_count=$(ps -ef | grep $web_service | grep -v grep | wc -l)

    echo "系统健康报告:"
    echo "CPU使用率: $cpu_usage%"
    echo "内存使用率: $mem_usage"
    echo "磁盘使用率: $disk_usage"
    echo "Web服务进程数量: $web_proc_count"
}

# 主执行函数
main() {
    check_web_service
    monitor_disk_space
    backup_logs
    system_health_report
}

# 调用主函数
main

# 日志记录(可按需调整)
echo "脚本执行完成: $(date)" >> /var/log/maintenance_script.log


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是二狗诶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值