Linux运维常用脚本:提升效率的自动化利器

📅 2026/7/3 4:10:15
Linux运维常用脚本:提升效率的自动化利器
整理运维工作中最实用的自动化脚本让重复工作一键完成。在Linux运维工作中善用脚本可以极大提升效率。本文整理了运维工作中最常用的脚本示例覆盖日志清理、备份、监控、系统检查等场景拿来即用。PART 01日志管理脚本1. 自动清理过期日志日志文件占用过多磁盘空间是常见问题通过脚本自动清理可有效避免。#!/bin/bash # auto_clean_logs.sh - 清理指定目录下N天前的日志文件 LOG_DIR/var/log/myapp DAYS30 find $LOG_DIR -name *.log -type f -mtime $DAYS -exec rm -f {} \; echo $(date): Cleaned logs older than $DAYS days in $LOG_DIR /var/log/cleanup.log2. 日志压缩归档将7天前的日志压缩归档节省空间的同时保留历史数据。#!/bin/bash # archive_logs.sh - 压缩归档7天前的日志 LOG_DIR/var/log/myapp ARCHIVE_DIR/backup/logs DAYS7 mkdir -p $ARCHIVE_DIR find $LOG_DIR -name *.log -type f -mtime $DAYS -exec gzip {} \; find $LOG_DIR -name *.log.gz -type f -mtime $DAYS -exec mv {} $ARCHIVE_DIR \; echo $(date): Archived logs older than $DAYS days /var/log/archive.logPART 02备份脚本3. 数据库备份脚本MySQL#!/bin/bash # mysql_backup.sh - MySQL数据库备份 DB_NAMEproduction_db DB_USERroot DB_PASSyour_password BACKUP_DIR/backup/mysql DATE$(date %Y%m%d_%H%M%S) KEEP_DAYS7 mkdir -p $BACKUP_DIR mysqldump -u$DB_USER -p$DB_PASS $DB_NAME | gzip $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz # 删除7天前的备份 find $BACKUP_DIR -name *.sql.gz -type f -mtime $KEEP_DAYS -delete echo $(date): MySQL backup completed: ${DB_NAME}_${DATE}.sql.gz4. 目录增量备份rsync使用rsync实现增量备份高效且节省空间。#!/bin/bash # rsync_backup.sh - 使用rsync进行增量备份 SOURCE_DIR/data/ BACKUP_DIR/backup/data/ EXCLUDE_FILE/backup/exclude.list # 排除文件列表示例 # *.tmp # cache/ # logs/*.log rsync -avz --delete --exclude-from$EXCLUDE_FILE $SOURCE_DIR $BACKUP_DIR echo $(date): Rsync backup completed /var/log/backup.logPART 03系统监控脚本5. 服务器健康检查#!/bin/bash # health_check.sh - 服务器健康状态检查 echo 服务器健康检查报告 echo 检查时间: $(date) echo # CPU负载 echo --- CPU负载 --- load_avg$(uptime | awk -Fload average: {print $2}) echo 负载均值: $load_avg echo # 内存使用 echo --- 内存使用 --- free -h | grep -E Mem|Swap echo # 磁盘使用 echo --- 磁盘使用 --- df -h | grep -v tmpfs | grep -v udev echo # 系统运行时间 echo --- 系统运行时间 --- uptime -p echo # 最近登录 echo --- 最近登录用户 --- last -n 5 | grep -v ^$ echo # 检查关键服务 echo --- 关键服务状态 --- services(nginx mysql ssh) for svc in ${services[]}; do if systemctl is-active --quiet $svc; then echo $svc: ✓ 运行中 else echo $svc: ✗ 已停止 fi done6. 磁盘使用率告警脚本#!/bin/bash # disk_alert.sh - 磁盘空间告警 THRESHOLD80 EMAILadminexample.com WARN_FILE/tmp/disk_warn.txt df -h | grep -v tmpfs | grep -v udev | while read line; do usage$(echo $line | awk {print $5} | sed s/%//) mount$(echo $line | awk {print $6}) if [ $usage -gt $THRESHOLD ]; then echo 警告: 分区 $mount 使用率已达 $usage% (阈值: $THRESHOLD%) $WARN_FILE fi done if [ -s $WARN_FILE ]; then cat $WARN_FILE | mail -s 磁盘空间告警 $EMAIL rm -f $WARN_FILE fi7. 端口连通性检查#!/bin/bash # port_check.sh - 检查服务端口是否正常 HOSTlocalhost PORTS(80 443 3306 6379) for port in ${PORTS[]}; do nc -zv $HOST $port /dev/null if [ $? -eq 0 ]; then echo ✓ 端口 $port 正常 else echo ✗ 端口 $port 异常 fi donePART 04系统维护脚本8. 定时清理内存缓存#!/bin/bash # clear_cache.sh - 清理系统内存缓存 # 同步磁盘数据 sync # 清理页缓存、目录项和inode echo 3 /proc/sys/vm/drop_caches echo $(date): System cache cleared /var/log/cache_clean.log9. 批量修改文件权限#!/bin/bash # fix_permissions.sh - 批量修复文件权限 WEB_DIR/var/www/html # 目录755文件644 find $WEB_DIR -type d -exec chmod 755 {} \; find $WEB_DIR -type f -exec chmod 644 {} \; # 特定目录开放写入权限 chmod 775 $WEB_DIR/uploads chmod 775 $WEB_DIR/cache echo $(date): Permissions fixed for $WEB_DIR10. 查找并清理大文件#!/bin/bash # find_large_files.sh - 查找并清理大文件 SEARCH_DIR/ SIZE500M LOG_FILE/tmp/large_files.log echo 正在查找大于500MB的文件... find $SEARCH_DIR -type f -size $SIZE -exec ls -lh {} \; | tee $LOG_FILE echo 查找到以下大文件请确认后删除 cat $LOG_FILE # 如需自动删除取消下面注释慎用 # find $SEARCH_DIR -type f -size $SIZE -exec rm -f {} \;PART 05用户管理脚本11. 批量创建用户#!/bin/bash # batch_create_users.sh - 批量创建用户 USER_FILEuser_list.txt # user_list.txt 格式: username:password:group # 例如: zhangsan:123456:developers while IFS: read -r username password group; do if [ -z $username ]; then continue fi # 创建用户组如果不存在 if [ -n $group ]; then groupadd $group 2/dev/null useradd -m -g $group -s /bin/bash $username else useradd -m -s /bin/bash $username fi # 设置密码 echo $username:$password | chpasswd echo 用户 $username 创建成功 done $USER_FILEPART 06定时任务配置12. Crontab配置示例将脚本加入定时任务实现自动化运维。# 编辑crontab crontab -e # 配置示例 # 每天凌晨2点清理日志 0 2 * * * /opt/scripts/auto_clean_logs.sh # 每天凌晨3点数据库备份 0 3 * * * /opt/scripts/mysql_backup.sh # 每5分钟检查磁盘使用率 */5 * * * * /opt/scripts/disk_alert.sh # 每周日凌晨4点系统健康检查 0 4 * * 0 /opt/scripts/health_check.sh /var/log/health_weekly.log # 每月1号清理缓存 0 5 1 * * /opt/scripts/clear_cache.shPART 07应急运维脚本13. 快速定位高CPU进程#!/bin/bash # top_cpu.sh - 快速定位高CPU消耗进程 echo TOP 10 CPU消耗进程 ps aux --sort-%cpu | head -1114. 批量停止指定服务#!/bin/bash # stop_services.sh - 批量停止服务 services(tomcat nginx redis) for svc in ${services[]}; do systemctl stop $svc if [ $? -eq 0 ]; then echo $svc 已停止 else echo $svc 停止失败 fi done实用脚本技巧添加执行权限chmod x script.sh调试模式bash -x script.sh查看详细执行过程日志记录./script.sh /var/log/script.log 21参数传递使用$1、$2接收命令行参数错误处理使用set -e遇错即停set -u未定义变量报错掌握这些脚本能让日常运维工作事半功倍。建议根据实际需求定制修改逐步积累属于自己的脚本库。