news 2026/6/10 14:38:50

Shell脚本实战:从零打造自动化部署、日志分析与性能监控系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Shell脚本实战:从零打造自动化部署、日志分析与性能监控系统

在现代 DevOps 实践中,Shell 脚本虽然“古老”,但依然是系统管理员和开发工程师不可或缺的利器。它轻量、高效、无需额外依赖,特别适合在 Linux 环境下完成自动化任务。本文将通过三个典型场景——自动化部署日志分析性能监控,带你用 Shell 脚本构建一套实用的运维工具链。


一、自动化部署脚本(Auto Deploy)

场景说明

每次发布新版本时,需要拉取代码、停止旧服务、部署新包、启动服务并验证状态。手动操作不仅繁琐,还容易出错。

脚本实现(deploy.sh)

#!/bin/bash # 配置区 APP_NAME="myapp" GIT_REPO="https://github.com/yourname/myapp.git" DEPLOY_DIR="/opt/$APP_NAME" LOG_FILE="/var/log/deploy_$(date +%Y%m%d).log" # 日志函数 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE" } # 检查权限 if [ "$(id -u)" -ne 0 ]; then log "请以 root 或 sudo 运行此脚本!" exit 1 fi # 停止服务 log "正在停止 $APP_NAME 服务..." systemctl stop $APP_NAME || log "停止服务失败,继续部署..." # 备份旧版本 if [ -d "$DEPLOY_DIR" ]; then BACKUP_DIR="/opt/backup/${APP_NAME}_$(date +%Y%m%d_%H%M%S)" mkdir -p "$BACKUP_DIR" cp -r "$DEPLOY_DIR"/* "$BACKUP_DIR"/ log "旧版本已备份至 $BACKUP_DIR" fi # 拉取最新代码 rm -rf /tmp/${APP_NAME}_build git clone "$GIT_REPO" /tmp/${APP_NAME}_build if [ $? -ne 0 ]; then log "Git 克隆失败!" exit 1 fi # 部署新版本 mkdir -p "$DEPLOY_DIR" cp -r /tmp/${APP_NAME}_build/* "$DEPLOY_DIR"/ chown -R appuser:appgroup "$DEPLOY_DIR" # 启动服务 log "正在启动 $APP_NAME 服务..." systemctl start $APP_NAME # 验证服务状态 sleep 3 if systemctl is-active --quiet $APP_NAME; then log "✅ 部署成功!服务运行中。" else log "❌ 服务启动失败!请检查日志。" exit 1 fi

使用建议:配合 Jenkins 或 GitLab CI 触发,实现一键发布。


二、日志分析脚本(Log Analyzer)

场景说明

Web 服务器每天产生大量访问日志,我们需要快速找出:

  • 访问最多的 IP
  • 返回 5xx 错误的请求
  • 异常高频访问(可能为爬虫或攻击)

脚本实现(analyze_access_log.sh)

#!/bin/bash LOG_FILE=${1:-/var/log/nginx/access.log} OUTPUT_DIR="/tmp/log_analysis_$(date +%Y%m%d)" mkdir -p "$OUTPUT_DIR" echo "📊 正在分析日志: $LOG_FILE" # 1. Top 10 访问 IP awk '{print $1}' "$LOG_FILE" | sort | uniq -c | sort -nr | head -10 > "$OUTPUT_DIR/top_ips.txt" # 2. 5xx 错误统计 awk '$9 ~ /^5[0-9][0-9]$/ {print $0}' "$LOG_FILE" | wc -l > "$OUTPUT_DIR/5xx_count.txt" awk '$9 ~ /^5[0-9][0-9]$/ {print $1, $7, $9}' "$LOG_FILE" | head -20 > "$OUTPUT_DIR/5xx_samples.txt" # 3. 每小时请求量趋势(假设日志格式含 [10/Dec/2025:14:23:01) awk -F'[][]' '{print substr($2,14,2)}' "$LOG_FILE" | sort | uniq -c > "$OUTPUT_DIR/hourly_requests.txt" # 4. 异常高频 IP(每分钟超过 100 次) awk '{ ip = $1 time = substr($4, 2, 16) # [10/Dec/2025:14:23 gsub(/:/, "-", time) key = ip "-" time count[key]++ } END { for (k in count) { if (count[k] > 100) print k, count[k] } }' "$LOG_FILE" > "$OUTPUT_DIR/suspicious_ips.txt" echo "✅ 分析完成!结果保存在 $OUTPUT_DIR" ls -lh "$OUTPUT_DIR"

提示:可结合cron每天凌晨自动运行,并邮件发送报告。


三、性能监控脚本(System Monitor)

场景说明

服务器资源异常可能导致服务中断。我们需要实时监控 CPU、内存、磁盘和负载,并在阈值超标时告警。

脚本实现(monitor.sh)

#!/bin/bash THRESHOLD_CPU=80 THRESHOLD_MEM=85 THRESHOLD_DISK=90 ALERT_EMAIL="admin@example.com" # 获取当前指标 CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8}') MEM_USAGE=$(free | awk 'NR==2{printf "%.0f", $3*100/$2}') DISK_USAGE=$(df / | awk 'NR==2 {print $5}' | tr -d '%') LOAD_AVG=$(uptime | awk -F'load average:' '{print $2}' | cut -d',' -f1) # 日志记录 echo "$(date): CPU=$CPU_USAGE%, MEM=$MEM_USAGE%, DISK=$DISK_USAGE%, LOAD=$LOAD_AVG" # 告警逻辑 ALERT_MSG="" if (( $(echo "$CPU_USAGE > $THRESHOLD_CPU" | bc -l) )); then ALERT_MSG+="⚠️ CPU 使用率过高: ${CPU_USAGE}%\n" fi if [ "$MEM_USAGE" -gt "$THRESHOLD_MEM" ]; then ALERT_MSG+="⚠️ 内存使用率过高: ${MEM_USAGE}%\n" fi if [ "$DISK_USAGE" -gt "$THRESHOLD_DISK" ]; then ALERT_MSG+="⚠️ 磁盘使用率过高: ${DISK_USAGE}%\n" fi if [ -n "$ALERT_MSG" ]; then echo -e "$ALERT_MSG" | mail -s "[告警] 服务器资源异常" "$ALERT_EMAIL" # 或使用 curl 发送企业微信/钉钉通知 fi
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 21:50:51

Python+Vue的留学信息推荐系统的设计与实现 Pycharm django flask

目录 这里写目录标题 目录项目展示详细视频演示技术栈文章下方名片联系我即可~解决的思路开发技术介绍性能/安全/负载方面python语言Django框架介绍技术路线关键代码详细视频演示 收藏关注不迷路!!需要的小伙伴可以发链接或者截图给我 项目展示 项目编…

作者头像 李华
网站建设 2026/6/10 10:38:59

AMD GPU性能优化终极指南:ROCmLibs让AI计算效率翻倍

AMD GPU性能优化终极指南:ROCmLibs让AI计算效率翻倍 【免费下载链接】ROCmLibs-for-gfx1103-AMD780M-APU ROCm Library Files for gfx1103 and update with others arches based on AMD GPUs for use in Windows. 项目地址: https://gitcode.com/gh_mirrors/ro/R…

作者头像 李华
网站建设 2026/6/10 10:37:27

还在为写论文熬夜焦虑?这8款免费AI工具让你告别恐惧!

还在对着空白的Word文档发呆,一遍遍刷新却挤不出几个字?还在因为导师一句“逻辑混乱、创新不足”的评语而彻夜难眠?还在查重降重和AI检测的红线边缘反复横跳,心惊胆战? 如果你的答案是肯定的,那么请立刻停…

作者头像 李华
网站建设 2026/6/10 10:41:36

深度合成类算法备案—安全自评估报告如何撰写

最近接到不少小伙伴咨询:抠门老板舍不得花钱找代办,自己硬刚算法备案,两个月被驳回了五次!不清楚这个《安全自评估报告》究竟要写什么内容?被驳回到心态崩溃?结合400多个成功案例的经验,今天为大…

作者头像 李华
网站建设 2026/6/10 10:39:07

大数据分析之机器学习

机器学习核心概念解析 机器学习是通过非编程方式赋予计算机学习能力的研究领域。它使系统能够从数据中自动学习和改进,而无需显式编程。 数据挖掘可视为机器学习与数据库技术的结合,专注于从数据库或数据仓库中提取有价值的信息。其核心在于将机器学习算…

作者头像 李华
网站建设 2026/6/10 10:39:10

颠覆性语音合成革命:Coqui TTS完整使用指南

颠覆性语音合成革命:Coqui TTS完整使用指南 【免费下载链接】coqui-ai-TTS 🐸💬 - a deep learning toolkit for Text-to-Speech, battle-tested in research and production 项目地址: https://gitcode.com/gh_mirrors/co/coqui-ai-TTS …

作者头像 李华