一些使用 shell 进行自动化运维的示例脚本

来自linux中国网wiki
跳到导航 跳到搜索

==

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