文章目录服务器性能监控脚本日志清理脚本自动备份脚本批量检查服务状态批量文件重命名磁盘空间告警脚本清理僵尸进程批量修改文件权限网络连接统计脚本自动同步时间脚本服务器性能监控脚本快速获取 CPU / 内存 / 磁盘使用率#!/bin/bashTIMESTAMP$(date%Y-%m-%d %H:%M:%S)# CPU 负载LOAD_AVG$(uptime|awk-Fload average:{print $2})# 内存使用率MEM_TOTAL$(free-m|awk/Mem:/ {print $2})MEM_USED$(free-m|awk/Mem:/ {print $3})MEM_USAGE_PERCENT$((MEM_USED*100/MEM_TOTAL))# 磁盘使用率DISK_USAGE$(df-h/|awkNR2 {print $5})# 磁盘ioecho 系统性能监控 ($TIMESTAMP) echoCPU 负载 (1min/5min/15min):$LOAD_AVGecho内存使用率:${MEM_USAGE_PERCENT}% (${MEM_USED}MB /${MEM_TOTAL}MB)echo根分区磁盘使用率:$DISK_USAGE日志清理脚本自动清理 N 天前的日志文件#!/bin/bashLOG_DIR/var/log/appDAYS7echo[$(date)] 开始清理$LOG_DIR下${DAYS}天前的 .log 文件...find$LOG_DIR-name*.log-mtime$DAYS-typef|whilereadf;doecho删除:$frm-f$fdone# 同时清理空目录find$LOG_DIR-typed-empty-deleteecho[$(date)] 清理完成自动备份脚本打包压缩 自动清理旧备份#!/bin/bashSRC_DIR/dataBACKUP_DIR/backupDATE$(date%Y%m%d_%H%M%S)BACKUP_FILEbackup_${DATE}.tar.gzKEEP_DAYS30mkdir-p$BACKUP_DIRecho[$(date)] 开始备份$SRC_DIR...tar-zcf$BACKUP_DIR/$BACKUP_FILE$SRC_DIR2/dev/nullif[$?-eq0];thenecho备份成功:$BACKUP_DIR/$BACKUP_FILE# 删除旧备份find$BACKUP_DIR-namebackup_*.tar.gz\-mtime$KEEP_DAYS-execrm-f{}\;echo已清理${KEEP_DAYS}天前的旧备份elseecho备份失败请检查目录权限exit1fi批量检查服务状态自动检测 尝试重启#!/bin/bashSERVICES(nginxmysqlredisdocker)forSERVICEin${SERVICES[]};dosystemctl is-active--quiet$SERVICEif[$?-eq0];thenecho✅$SERVICE正在运行elseecho⚠️$SERVICE未运行尝试重启...systemctl restart$SERVICEif[$?-eq0];thenecho✅$SERVICE重启成功elseecho❌$SERVICE重启失败请手动检查# 发送告警阿里云可调用 DingTalk Webhookfifidone批量文件重命名给目录下文件统一加前缀#!/bin/bashDIR${1:-.}PREFIX${2:-backup_}echo目标目录:$DIRecho文件名前缀:$PREFIXecho------------------------forFILEin$DIR/*;do[-f$FILE]||continueBASENAME$(basename$FILE)NEW_NAME$DIR/${PREFIX}${BASENAME}mv$FILE$NEW_NAME2/dev/nullecho重命名:$BASENAME→${PREFIX}${BASENAME}doneecho------------------------echo文件重命名完成磁盘空间告警脚本超过阈值自动发邮件 / Webhook 告警#!/bin/bashTHRESHOLD80EMAILadminexample.comPARTITION/DISK_USAGE$(df-h$PARTITION|awkNR2 {print $5}|cut-d%-f1)if[$DISK_USAGE-gt$THRESHOLD];thenMSG[告警] 磁盘使用率达到${DISK_USAGE}%分区:$PARTITIONecho$MSG# 方式1: 邮件告警需配置 mail / postfixecho$MSG|mail-s磁盘空间告警 -$(hostname)$EMAIL# 方式2: 钉钉 Webhook推荐# curl -X POST https://oapi.dingtalk.com/robot/send?access_tokenxxx \# -H Content-Type: application/json \# -d {\msgtype\:\text\,\text\:{\content\:\$MSG\}}fi清理僵尸进程批量杀掉僵尸进程Z 状态#!/bin/bashZOMBIES$(psaux|awk$8 ~ /Z/ {print $2})if[-z$ZOMBIES];thenecho未发现僵尸进程exit0fiecho发现僵尸进程 PID:$ZOMBIESecho------------------------forPIDin$ZOMBIES;do# 僵尸进程无法被 kill -9 杀死# 需要杀掉其父进程PPID$(ps-oppid-p$PID|tr-d )echo僵尸进程$PID父进程:$PPIDecho尝试重启父进程$PPID...systemctl restart$(ps-ounit-p$PPID|tr-d )doneecho------------------------echo清理完成建议检查父进程状态批量修改文件权限递归设置目录权限Web目录推荐755目录644文件#!/bin/bashDIR${1:-/var/www/html}PERMISSION${2:-755}echo目标目录:$DIRecho设置权限:$PERMISSIONecho------------------------chmod-R$PERMISSION$DIRif[$?-eq0];thenecho权限设置成功echo验证:find$DIR-maxdepth2-ls|head-10elseecho权限设置失败请检查目录是否存在fi网络连接统计脚本统计 TCP 各状态连接数#!/bin/bashecho TCP 连接状态统计 netstat-ant2/dev/null|awk/^tcp/ {print $6}|sort|uniq-c|sort-nrechoecho 连接数 TOP 10 IP netstat-ant2/dev/null|awk/^tcp/ {print $5}|cut-d:-f1|sort|uniq-c|sort-nr|head-10echoecho 当前 ESTABLISHED 连接数 ESTABLISHED$(netstat-ant2/dev/null|grep-cESTABLISHED)echoESTABLISHED:$ESTABLISHED自动同步时间脚本确保服务器时间与 NTP 同步#!/bin/bashNTP_SERVERpool.ntp.orgMAX_OFFSET500# 毫秒echo 当前时间:$(date)# 检查 ntpdate 或 chronyc 是否可用ifcommand-vntpdate/dev/null;thenntpdate$NTP_SERVERRESULT$?elifcommand-vchronyc/dev/null;thenchronyc makestepRESULT$?elseecho未找到 ntpdate 或 chronyd请先安装exit1fiif[$RESULT-eq0];thenecho✅ 时间同步成功:$(date)# 写入硬件时钟hwclock--systohcelseecho❌ 时间同步失败请检查网络或 NTP 服务fi