优秀的编程知识分享平台

网站首页 > 技术文章 正文

常用shell脚本(linux)

nanyue 2025-03-01 14:53:49 技术文章 8 ℃

日常运维脚本是用于自动化执行常见运维任务的脚本,旨在提高效率、减少人为错误并确保系统稳定性。以下是一些常见的日常运维任务及其对应的脚本示例:

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.总结

日常运维脚本可以显著提高运维效率,减少重复性工作。通过编写和优化脚本,可以实现系统监控、日志管理、备份恢复、用户管理、软件安装、网络管理等任务的自动化。在实际使用中,建议遵循以下最佳实践:

  • 模块化设计:将脚本拆分为多个函数或模块,便于复用和维护。
  • 日志记录:在脚本中添加日志记录功能,便于跟踪和排查问题。
  • 错误处理:添加错误处理机制,确保脚本在异常情况下能够正确处理。
  • 安全性:避免在脚本中硬编码敏感信息,使用环境变量或密钥管理工具。
最近发表
标签列表