返回

shell自动化运维脚本:Shell自动化运维脚本实战指南

来源:网络   作者:   日期:2025-10-30 16:11:49  

Shell脚本在自动化运维中的重要性

Shell脚本是一种基于命令行的脚本语言,能够将一系列命令组合在一起,按顺序执行,在运维工作中,Shell脚本常用于以下场景:

  1. 批量管理服务器:自动化部署、配置更新、软件安装等任务。
  2. 监控系统状态:定期检查服务器资源使用情况、服务状态等。
  3. 故障处理:自动检测并修复常见问题,减少系统停机时间。
  4. 日志分析:快速提取和处理日志数据,帮助定位问题。

典型Shell自动化运维脚本案例

案例1:批量检查服务器健康状态

以下脚本用于批量检查多台服务器的网络连通性、磁盘空间和CPU负载。

#!/bin/bash
# 定义服务器列表
servers=("192.168.1.101" "192.168.1.102" "192.168.1.103")
# 遍历服务器列表
for server in "${servers[@]}"; do
    echo "Checking server $server..."
    # 检查网络连通性
    if ping -c 2 $server &> /dev/null; then
        echo "$server is reachable."
    else
        echo "$server is unreachable!" >> /var/log/server_check.log
        continue
    fi
    # 检查磁盘空间
    df -h / | awk 'NR==2 {print $5}' >> /tmp/server_disk.log
    echo "Disk usage for $server: $(df -h / | awk 'NR==2 {print $5}')"
    # 检查CPU负载
    uptime | awk -F 'load average:' '{print $2}' | cut -d ',' -f1 >> /tmp/server_load.log
    echo "Load average for $server: $(uptime | awk -F 'load average:' '{print $2}' | cut -d ',' -f1)"
done

使用方法:将服务器IP地址添加到数组中,定期执行脚本,结果将保存在日志文件中。

shell自动化运维脚本:Shell自动化运维脚本实战指南


案例2:自动备份数据库

以下脚本用于自动备份MySQL数据库,并将备份文件上传到远程服务器。

#!/bin/bash
# 数据库配置
DB_NAME="mydatabase"
DB_USER="root"
DB_PASSWORD="password"
BACKUP_DIR="/backup/mysql"
REMOTE_USER="backup_user"
REMOTE_HOST="backup-server.example.com"
REMOTE_DIR="/backup/mysql"
# 创建备份目录
mkdir -p $BACKUP_DIR
# 执行备份
mysqldump -u $DB_USER -p$DB_PASSWORD $DB_NAME > $BACKUP_DIR/$DB_NAME_$(date +%Y%m%d).sql
# 压缩备份文件
gzip $BACKUP_DIR/$DB_NAME_$(date +%Y%m%d).sql
# 上传备份到远程服务器
scp $BACKUP_DIR/$DB_NAME_$(date +%Y%m%d).sql.gz $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR
# 删除本地备份(可选)
# rm $BACKUP_DIR/$DB_NAME_$(date +%Y%m%d).sql.gz
echo "Backup completed for $DB_NAME on $(date)"

使用方法:将脚本设置为定时任务(如cron),每天凌晨执行一次。

shell自动化运维脚本:Shell自动化运维脚本实战指南


案例3:自动清理日志文件

以下脚本用于自动清理超过30天的日志文件,释放磁盘空间。

#!/bin/bash
# 定义日志目录
LOG_DIR="/var/log"
# 遍历日志目录
for log_file in $LOG_DIR/*.log; do
    # 检查文件是否存在
    if [ -f "$log_file" ]; then
        # 获取文件修改时间
        modify_time=$(stat -c %Y "$log_file")
        current_time=$(date +%s)
        # 计算文件年龄(秒)
        age=$(( (current_time - modify_time) / 86400 ))
        # 如果文件超过30天,删除
        if [ $age -gt 30 ]; then
            echo "Removing old log file: $log_file"
            rm -f "$log_file"
        fi
    fi
done

使用方法:将脚本设置为定时任务,每周运行一次。


Shell脚本的最佳实践

  1. 错误处理:使用set -e让脚本在遇到错误时立即退出,避免继续执行错误命令。
  2. 输入验证:对脚本的输入参数进行验证,防止意外行为。
  3. 日志记录:将脚本执行过程中的关键信息记录到日志文件中,便于排查问题。
  4. 模块化设计:将复杂的脚本拆分为多个函数或子脚本,提高可读性和可维护性。
  5. 版本控制:将脚本纳入版本控制系统(如Git),便于管理和协作。

分类:编程
责任编辑:今题网
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。

相关文章:

文章已关闭评论!