一些使用 shell 进行自动化运维的示例脚本
跳到导航
跳到搜索
==
1. 远程服务器批量执行命令 此脚本可以批量对远程服务器执行命令,适用于需要管理多台服务器的场景。 bash #!/bin/bash # 服务器列表文件 (每行一个 IP) SERVER_LIST="servers.txt" COMMAND="uptime" # 要执行的命令 # 遍历服务器列表并执行命令 while read -r server; do echo "Connecting to $server" ssh user@$server "$COMMAND" done < "$SERVER_LIST" 2. 监控磁盘空间 这个脚本用于监控服务器上的磁盘使用情况,当磁盘使用率超过设定的阈值时会发送警告。 bash #!/bin/bash THRESHOLD=80 # 阈值百分比 # 获取磁盘使用情况并检查是否超过阈值 df -h | awk '{ if($5+0 > '"$THRESHOLD"') print $0; }' | while read output; do echo "磁盘使用警告: $output" done 3. 自动化日志清理 清理超过一定天数的日志文件,以确保服务器的磁盘不会被过量的日志占满。 bash #!/bin/bash LOG_DIR="/var/log/myapp" DAYS=7 # 保留7天内的日志 # 查找并删除超过指定天数的日志文件 find $LOG_DIR -type f -mtime +$DAYS -exec rm -f {} \; echo "清理日志完成,删除超过 $DAYS 天的日志文件。" 4. 备份 MySQL 数据库 此脚本会自动备份 MySQL 数据库,并将备份文件保存到指定目录。 bash #!/bin/bash USER="root" PASSWORD="password123" DATABASE="my_database" BACKUP_DIR="/backup/mysql" DATE=$(date +%Y%m%d%H%M%S) # 创建备份目录(如果不存在) mkdir -p "$BACKUP_DIR" # 备份数据库 mysqldump -u $USER -p$PASSWORD $DATABASE > "$BACKUP_DIR/${DATABASE}_$DATE.sql" # 显示备份完成的提示 echo "数据库备份完成:$BACKUP_DIR/${DATABASE}_$DATE.sql" 5. 定时重启服务 定期重启指定的服务以确保服务稳定运行。 bash #!/bin/bash SERVICE_NAME="nginx" # 重启服务 systemctl restart $SERVICE_NAME # 检查服务是否重启成功 if systemctl is-active --quiet $SERVICE_NAME; then echo "$SERVICE_NAME 服务已成功重启" else echo "重启 $SERVICE_NAME 服务失败" fi 6. 检测并重启停止的服务 这个脚本会检测指定服务是否运行,若停止则会尝试重启。 bash #!/bin/bash SERVICE="nginx" # 检查服务是否正在运行 if systemctl is-active --quiet $SERVICE; then echo "$SERVICE 正在运行" else echo "$SERVICE 停止,尝试重启..." systemctl start $SERVICE if systemctl is-active --quiet $SERVICE; then echo "$SERVICE 已成功重启" else echo "重启 $SERVICE 失败" fi fi 7. 批量检测主机是否在线 通过 ping 命令批量检测多台主机是否在线。 bash #!/bin/bash # 主机列表文件 HOSTS_FILE="hosts.txt" # 逐行读取主机文件并 ping while read -r host; do if ping -c 1 -W 1 $host > /dev/null; then echo "$host is up" else echo "$host is down" fi done < "$HOSTS_FILE" 8. 自动化服务器资源监控 定期监控 CPU、内存和磁盘使用率,并记录到日志文件。 bash #!/bin/bash LOG_FILE="/var/log/system_health.log" # 获取系统资源使用情况 CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}') MEMORY_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0}') DISK_USAGE=$(df -h / | grep / | awk '{print $5}' | sed 's/%//g') # 记录到日志文件 echo "$(date) - CPU: $CPU_USAGE%, Memory: $MEMORY_USAGE%, Disk: $DISK_USAGE%" >> $LOG_FILE 9. 用户账号批量创建 此脚本通过批量创建用户账号并为其设置密码,适用于新系统部署或大规模用户管理场景。 bash #!/bin/bash USER_LIST="users.txt" # 用户列表文件(每行一个用户名) while read -r username; do # 创建用户 useradd "$username" # 设置默认密码 echo "$username:password123" | chpasswd echo "用户 $username 已创建" done < "$USER_LIST" 10. 自动化安全更新 此脚本自动检查并安装系统的安全更新,适用于保持服务器更新的场景。 bash #!/bin/bash # 更新系统包信息 apt-get update # 安装安全更新 apt-get upgrade -y echo "系统安全更新已完成"