当前位置: 首页 > news >正文

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

场景描述

你负责一个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=$1message=$2# 使用mail命令发送邮件,也可以替换成其他通知方式echo "$message" | mail -s "$subject" $admin_email
}# 检查Web服务
check_web_service() {if systemctl is-active --quiet $web_service; thenecho "Web服务正在运行"elseecho "Web服务未运行,尝试启动..."systemctl start $web_serviceif [ $? -ne 0 ]; thensend_notification "Web服务启动失败" "尝试启动$web_service失败,请立即检查!"fifi
}# 监控磁盘空间
monitor_disk_space() {usage=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')if [ $usage -ge 85 ]; thensend_notification "磁盘空间警告" "根分区磁盘使用率已达$usage%,请及时清理。"fi
}# 备份日志文件
backup_logs() {tar czf $backup_dir/log-$(date +%Y%m%d).tar.gz /var/logfind $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_servicemonitor_disk_spacebackup_logssystem_health_report
}# 调用主函数
main# 日志记录(可按需调整)
echo "脚本执行完成: $(date)" >> /var/log/maintenance_script.log
http://www.lryc.cn/news/306236.html

相关文章:

  • docker 安装nacos 一脚shell脚本
  • mysql的隔离级别,和实现
  • Linux的信号
  • Spring数据脱敏实现
  • Java核心-核心类与API(4)
  • 【C语言】详解计算机二级c语言程序题
  • 限流算法
  • 备战蓝桥杯 Day10(背包dp)
  • Sora 使用教程,新手小白可用
  • 【洛谷千题详解】P1031 均分纸牌
  • 基于文本提示和语义分割的快速抠图
  • 什么是媒体发稿?发稿媒体分类及发稿流程
  • 安全测试自学手册之软件安全测试基础
  • 【LeetCode】升级打怪之路 Day 04:链表 part 2
  • JAVA编程题系列——涵盖几乎所有java内容
  • 【Android12】Monkey压力测试源码执行流程分析
  • Java架构师之路八、安全技术:Web安全、网络安全、系统安全、数据安全等
  • Codeforces Round 240 (Div. 1) C. Mashmokh and Reverse Operation(分治+逆序对)
  • SpringBoot源码解读与原理分析(三十二)SpringBoot整合JDBC(一)JDBC组件的自动装配
  • petalinux_zynq7 驱动DAC以及ADC模块之五:nodejs+vue3实现web网页波形显示
  • Android java中内部类的使用
  • llm的inference(二)
  • pytorch -- torch.nn.Module
  • Microsoft Edge 越用越慢、超级卡顿?网页B站播放卡顿?
  • XGB-9: 分类数据
  • FreeRTOS学习第8篇--同步和互斥操作引子
  • c++STL容器的使用(vector, list, map, set等),c++STL算法的理解与使用(sort, find, binary_search等)
  • 选择VR全景行业,需要了解哪些内容?
  • 830. 单调栈
  • H5 个人引导页官网型源码