企业级开发和运维中,Shell 脚本常用于自动化运维、批量处理、监控报警

  • 在企业级开发和运维中,Shell 脚本常用于自动化运维、批量处理、监控报警、部署发布等场景。
  •  
  • 一、自动化部署脚本
  •  
  • 场景:实现代码拉取、编译、服务重启等部署流程自动化。
  • 示例:Git 拉取代码并重启服务
  •  
  • bash
  • #!/bin/bash
  • # 定义变量
  • APP_DIR="/data/apps/myapp"
  • GIT_REPO="git@github.com:company/myapp.git"
  • SERVICE_NAME="myapp.service"
  •  
  • # 拉取最新代码
  • cd $APP_DIR || exit 1
  • git pull origin main || {
  •     echo "代码拉取失败!"
  •     exit 1
  • }
  •  
  • # 编译(若需要)
  • make clean && make install || exit 1
  •  
  • # 重启服务
  • systemctl restart $SERVICE_NAME || {
  •     echo "服务重启失败!"
  •     exit 1
  • }
  •  
  • echo "部署成功!"
  •  
  •  
  • 企业价值:避免手动操作失误,实现标准化部署,配合 CI/CD 系统(如 Jenkins)使用。
  •  
  • 二、日志处理脚本
  •  
  • 1. 日志切割(按时间/大小)
  •  
  • 场景:避免日志文件过大影响性能,保留历史日志便于排查问题。
  •  
  • bash
  • #!/bin/bash
  • # 按天切割 Nginx 日志
  • LOG_DIR="/var/log/nginx"
  • TODAY=$(date +"%Y%m%d")
  •  
  • # 停止 Nginx 日志写入(平滑重启)
  • kill -USR1 $(cat /var/run/nginx.pid)
  •  
  • # 重命名旧日志
  • mv ${LOG_DIR}/access.log ${LOG_DIR}/access_${TODAY}.log
  • mv ${LOG_DIR}/error.log ${LOG_DIR}/error_${TODAY}.log
  •  
  • # 清理 7 天前的日志
  • find ${LOG_DIR} -name "*.log" -mtime +7 -exec rm {} \;
  •  
  •  
  • 2. 日志统计分析
  •  
  • 场景:统计高频访问 IP、错误码(如 404、500)等。
  •  
  • bash
  • #!/bin/bash
  • # 统计 Nginx 访问日志中 Top 10 高频 IP
  • grep -v "^#" /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 10
  •  
  • # 统计 500 错误次数
  • grep " 500 " /var/log/nginx/access.log | wc -l
  •  
  •  
  • 三、监控与报警脚本
  •  
  • 1. 进程监控
  •  
  • 场景:检测关键服务(如 MySQL、Tomcat)是否存活,异常时重启或报警。
  •  
  • bash
  • #!/bin/bash
  • # 监控 Tomcat 进程
  • PROCESS_NAME="catalina.jar"
  • PID=$(ps -ef | grep $PROCESS_NAME | grep -v grep | awk '{print $2}')
  •  
  • if [ -z "$PID" ]; then
  •     echo "Tomcat 进程未运行,尝试重启..."
  •     /usr/local/tomcat/bin/startup.sh
  •     # 报警(邮件/短信)
  •     echo "Tomcat 已重启" | mail -s "监控报警" admin@company.com
  • else
  •     echo "Tomcat 进程运行正常(PID: $PID)"
  • fi
  •  
  •  
  • 2. 资源监控(CPU/内存/磁盘)
  •  
  • 场景:当服务器资源(如内存使用率 > 80%)超过阈值时报警。
  •  
  • bash
  • #!/bin/bash
  • # 内存使用率
  • MEM_USED=$(free -m | awk 'NR==2{printf "%.2f%%", $3*100/$2}')
  • # 磁盘使用率
  • DISK_USED=$(df -h | awk '$NF=="/"{printf "%.2f%%", $(NF-1)}')
  •  
  • if [ $(echo "$MEM_USED > 80" | bc) -eq 1 ] || [ $(echo "$DISK_USED > 90" | bc) -eq 1 ]; then
  •     echo "内存使用率:$MEM_USED,磁盘使用率:$DISK_USED" | mail -s "服务器资源报警" admin@company.com
  • fi
  •  
  •  
  • 四、批量操作脚本
  •  
  • 场景:对多台服务器执行相同命令(如更新软件、分发文件)。
  • 示例:批量重启远程服务器服务
  •  
  • bash
  • #!/bin/bash
  • # 服务器列表
  • SERVERS=("192.168.1.100" "192.168.1.101" "192.168.1.102")
  •  
  • for SERVER in "${SERVERS[@]}"; do
  •     echo "------------------- 处理 $SERVER -------------------"
  •     # 免密登录执行命令
  •     ssh root@$SERVER "systemctl restart httpd"
  •     # 检查执行结果
  •     if [ $? -eq 0 ]; then
  •         echo "$SERVER 服务重启成功"
  •     else
  •         echo "$SERVER 服务重启失败"
  •     fi
  • done
  •  
  •  
  • 五、定时任务(Cron 脚本)
  •  
  • 场景:通过  crontab  实现定时备份、日志清理等无人值守任务。
  • 示例:每日凌晨 2 点备份数据库
  •  
  • bash
  • #!/bin/bash
  • # 定义变量
  • DB_NAME="mydb"
  • BACKUP_DIR="/data/backup/db"
  • USER="root"
  • PASSWORD="password"
  • DATE=$(date +"%Y%m%d_%H%M%S")
  •  
  • # 创建备份目录
  • mkdir -p $BACKUP_DIR
  •  
  • # 执行备份
  • mysqldump -u$USER -p$PASSWORD $DB_NAME | gzip > ${BACKUP_DIR}/${DB_NAME}_${DATE}.sql.gz
  •  
  • # 保留 7 天内的备份
  • find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
  •  
  •  
  • 配置 Cron:
  •  
  • bash
  • 0 2 * * * /path/to/backup_db.sh
  •  
  •  
  • 六、服务管理脚本(类似系统服务)
  •  
  • 场景:封装自定义服务的启动、停止、重启、状态检查(如 Tomcat、自研服务)。
  • 示例:Tomcat 服务管理脚本(放置于  /etc/init.d/  或  /usr/lib/systemd/system/ )
  •  
  • bash
  • #!/bin/bash
  • # chkconfig: 2345 80 90
  • # description: Tomcat Service Management
  •  
  • JAVA_HOME="/usr/local/java"
  • TOMCAT_HOME="/usr/local/tomcat"
  • PID_FILE="$TOMCAT_HOME/temp/tomcat.pid"
  •  
  • case "$1" in
  •     start)
  •         echo "Starting Tomcat..."
  •         export JAVA_HOME
  •         $TOMCAT_HOME/bin/startup.sh
  •         ;;
  •     stop)
  •         echo "Stopping Tomcat..."
  •         $TOMCAT_HOME/bin/shutdown.sh
  •         # 强制终止未停止的进程
  •         if [ -f "$PID_FILE" ]; then
  •             kill -9 $(cat "$PID_FILE")
  •         fi
  •         ;;
  •     restart)
  •         $0 stop
  •         $0 start
  •         ;;
  •     status)
  •         if [ -f "$PID_FILE" ] && kill -0 $(cat "$PID_FILE"); then
  •             echo "Tomcat is running (PID: $(cat "$PID_FILE"))"
  •         else
  •             echo "Tomcat is stopped"
  •         fi
  •         ;;
  •     *)
  •         echo "Usage: $0 {start|stop|restart|status}"
  •         exit 1
  •         ;;
  • esac
  • exit 0
  •  
  •  
  • 七、环境初始化脚本
  •  
  • 场景:快速初始化服务器环境(安装依赖、配置参数、创建用户等)。
  • 示例:部署 LNMP 环境
  •  
  • bash
  • #!/bin/bash
  • # 安装 Nginx、MySQL、PHP
  • yum install -y nginx mariadb-server php-fpm php-mysql
  •  
  • # 启动服务并设置开机自启
  • systemctl start nginx mariadb php-fpm
  • systemctl enable nginx mariadb php-fpm
  •  
  • # 配置 Nginx 站点
  • cat > /etc/nginx/conf.d/default.conf <<EOF
  • server {
  •     listen 80;
  •     server_name localhost;
  •     root /var/www/html;
  •     index index.php index.html;
  •     location ~ \.php$ {
  •         fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
  •         fastcgi_index index.php;
  •         fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
  •         include fastcgi_params;
  •     }
  • }
  • EOF
  •  
  • systemctl restart nginx
  •  
  •  
  • 八、错误处理与日志记录
  •  
  • 企业最佳实践:
  •  
  • 1. 脚本开头检查权限:
  • bash
  • if [ "$(id -u)" -ne 0 ]; then
  •     echo "Error: 必须使用 root 权限运行!" >&2
  •     exit 1
  • fi
  •  
  •  
  • 2. 记录执行日志:
  • bash
  • exec &> /var/log/script.log # 将输出重定向到日志文件
  •  
  •  
  • 3. 捕获异常退出:
  • bash
  • trap 'echo "脚本异常退出,错误码:$?"; exit 1' ERR
  •  
  •  
  • 总结:Shell 在企业中的核心价值
  •  
  • 1. 自动化:减少人工操作,降低失误率(如部署、备份、监控)。
  •  
  • 2. 标准化:通过脚本统一操作流程,适应多服务器环境。
  •  
  • 3. 效率提升:批量处理任务(如数百台服务器的配置同步)。
  •  
  • 4. 可维护性:结合版本控制(如 Git)管理脚本,方便迭代。
  •  
  • 企业中常将 Shell 脚本与 Ansible、Puppet 等配置管理工具结合,实现更复杂的运维自动化。

     

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值