一些使用 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 "系统安全更新已完成"