Shell 脚本中常用运维逻辑模板

2025.5.29 杂七杂八 1974

Shell 脚本中常用运维逻辑模板 杂七杂八-第1张

本文详细介绍Shell脚本在运维工作中的核心逻辑模板,包括日志分析、进程监控、文件操作等场景的标准化实现方案,帮助运维工程师快速构建高效自动化脚本,提升服务器管理效率。

一、日志分析与处理模板

!/bin/bash
 日志关键词监控模板
LOG_FILE="/var/log/nginx/error.log"
KEY_WORD="502 Bad Gateway"

tail -Fn0 $LOG_FILE | while read line
do
  if echo "$line" | grep -q "$KEY_WORD"; then
    echo "$(date '+%Y-%m-%d %H:%M:%S') - 发现错误: $line" >> /var/log/nginx_monitor.log
     触发告警动作
    /usr/local/bin/send_alert.sh
  fi
done

典型应用场景:

  • 实时监控Nginx/PHP错误日志
  • 检测系统安全事件(如SSH暴力破解)
  • 应用异常状态捕获

二、进程守护与自动重启

!/bin/bash
 进程守护模板
PROCESS_NAME="mysqld"
MAX_RETRY=3

check_process() {
  if ! pgrep -x "$PROCESS_NAME" >/dev/null; then
    echo "$(date) - 进程 $PROCESS_NAME 异常终止" >> /var/log/process_monitor.log
    return 1
  fi
  return 0
}

for ((i=1; i<=$MAX_RETRY; i++)); do
  if check_process; then
    exit 0
  else
    systemctl restart $PROCESS_NAME
    sleep 5
  fi
done

 多次重启失败后升级告警
echo "$(date) - 进程 $PROCESS_NAME 重启失败" | mail -s "紧急告警" admin@example.com

三、磁盘空间监控模板

!/bin/bash
 磁盘空间检查模板
THRESHOLD=90
PARTITION="/dev/sda1"

usage=$(df -h | grep "$PARTITION" | awk '{print $5}' | cut -d'%' -f1)

if [ $usage -ge $THRESHOLD ]; then
  echo "$(date '+%Y-%m-%d %H:%M:%S') - 磁盘空间告警: $PARTITION 使用率 ${usage}%" >> /var/log/disk_monitor.log
   自动清理旧日志
  find /var/log -name ".log" -type f -mtime +30 -delete
fi

四、批量服务器操作模板

!/bin/bash
 多主机并行执行模板
HOST_LIST=("server1" "server2" "server3")
COMMAND="uptime"

for host in "${HOST_LIST[@]}"; do
  {
    echo "==== $host ===="
    ssh $host "$COMMAND"
  } >> cluster_report.log 2>&1 &
done

wait  等待所有后台任务完成
echo "所有服务器状态收集完成"

五、配置文件自动化管理

!/bin/bash
 配置差异对比与同步模板
CONFIG_FILE="/etc/nginx/nginx.conf"
TEMPLATE_FILE="/opt/conf/nginx.conf.template"
BACKUP_DIR="/etc/nginx/backup"

 生成配置校验和
old_checksum=$(md5sum $CONFIG_FILE | cut -d' ' -f1)
new_checksum=$(md5sum $TEMPLATE_FILE | cut -d' ' -f1)

if [ "$old_checksum" != "$new_checksum" ]; then
   备份旧配置
  cp "$CONFIG_FILE" "$BACKUP_DIR/nginx.conf.$(date +%Y%m%d%H%M%S)"
   应用新配置
  cp "$TEMPLATE_FILE" "$CONFIG_FILE"
   重载服务
  systemctl reload nginx
  echo "配置文件已更新并重载服务"
fi

最佳实践建议

  1. 所有脚本添加set -e确保错误立即退出
  2. 关键操作前进行预检查(如磁盘空间是否足够)
  3. 重要操作必须记录审计日志
  4. 使用lockfile防止脚本重复执行
  5. 通过timeout命令设置超时机制

评论