日常运维脚本是用于自动化执行常见运维任务的脚本,旨在提高效率、减少人为错误并确保系统稳定性。以下是一些常见的日常运维任务及其对应的脚本示例:
1. 监控 CPU、内存和磁盘使用率
#!/bin/bash
# 监控系统资源使用率
THRESHOLD=80
# 获取 CPU 使用率
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
# 获取内存使用率
MEM_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
# 获取磁盘使用率
DISK_USAGE=$(df / | grep / | awk '{print $5}' | sed 's/%//g')
# 检查并告警
if (( $(echo "$CPU_USAGE > $THRESHOLD" | bc -l) )); then
echo "CPU usage is high: $CPU_USAGE%" | mail -s "CPU Alert" admin@example.com
fi
if (( $(echo "$MEM_USAGE > $THRESHOLD" | bc -l) )); then
echo "Memory usage is high: $MEM_USAGE%" | mail -s "Memory Alert" admin@example.com
fi
if (( $(echo "$DISK_USAGE > $THRESHOLD" | bc -l) )); then
echo "Disk usage is high: $DISK_USAGE%" | mail -s "Disk Alert" admin@example.com
fi
2.自动清理旧日志文件
#!/bin/bash
# 清理超过 30 天的日志文件
LOG_DIR="/var/log"
MAX_DAYS=30
find $LOG_DIR -type f -name "*.log" -mtime +$MAX_DAYS -exec rm -f {} \;
echo "Old log files cleaned up."
3.自动化数据库备份
#!/bin/bash
# 备份 MySQL 数据库
DB_USER="root"
DB_PASS="password"
DB_NAME="mydatabase"
BACKUP_DIR="/backup"
DATE=$(date +%F)
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/$DB_NAME-$DATE.sql
gzip $BACKUP_DIR/$DB_NAME-$DATE.sql
echo "Database backup completed: $BACKUP_DIR/$DB_NAME-$DATE.sql.gz"
4.自动化文件备份
#!/bin/bash
# 备份重要文件
SOURCE_DIR="/var/www/html"
BACKUP_DIR="/backup"
DATE=$(date +%F)
tar -czf $BACKUP_DIR/backup-$DATE.tar.gz $SOURCE_DIR
echo "File backup completed: $BACKUP_DIR/backup-$DATE.tar.gz"
5 批量创建用户
#!/bin/bash
# 批量创建用户
USER_LIST=("user1" "user2" "user3")
for USER in "${USER_LIST[@]}"; do
useradd -m -s /bin/bash $USER
echo "User $USER created."
done
6.批量删除用户
#!/bin/bash
# 批量删除用户
USER_LIST=("user1" "user2" "user3")
for USER in "${USER_LIST[@]}"; do
userdel -r $USER
echo "User $USER deleted."
done
7.自动化安装常用软件
#!/bin/bash
# 安装常用软件
APT_PACKAGES=("vim" "git" "curl" "htop")
for PKG in "${APT_PACKAGES[@]}"; do
apt-get install -y $PKG
echo "Package $PKG installed."
done
8.自动化更新系统
#!/bin/bash
# 更新系统
apt-get update
apt-get upgrade -y
apt-get autoremove -y
echo "System updated."
9.检查网络连通性
#!/bin/bash
# 检查网络连通性
HOSTS=("google.com" "github.com")
for HOST in "${HOSTS[@]}"; do
ping -c 1 $HOST > /dev/null
if [ $? -eq 0 ]; then
echo "$HOST is reachable."
else
echo "$HOST is unreachable."
fi
done
10.监控端口状态
#!/bin/bash
# 监控端口状态
PORTS=("80" "443" "22")
for PORT in "${PORTS[@]}"; do
nc -zv localhost $PORT > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Port $PORT is open."
else
echo "Port $PORT is closed."
fi
done
11.1 使用 Cron 定时执行脚本
- 编辑 Cron 任务:
- crontab -e
- 添加定时任务(例如每天凌晨 2 点执行备份脚本):
- 0 2 * * * /path/to/backup_script.sh
12.总结
日常运维脚本可以显著提高运维效率,减少重复性工作。通过编写和优化脚本,可以实现系统监控、日志管理、备份恢复、用户管理、软件安装、网络管理等任务的自动化。在实际使用中,建议遵循以下最佳实践:
- 模块化设计:将脚本拆分为多个函数或模块,便于复用和维护。
- 日志记录:在脚本中添加日志记录功能,便于跟踪和排查问题。
- 错误处理:添加错误处理机制,确保脚本在异常情况下能够正确处理。
- 安全性:避免在脚本中硬编码敏感信息,使用环境变量或密钥管理工具。