前言
作为一名常年与服务器打交道的运维人员,我深知重复性工作有多浪费时间。今天分享 5 个我日常使用的自动化脚本,希望能帮你从繁琐的工作中解放出来。
一、服务器健康检查脚本
这个脚本会检查 CPU、内存、磁盘和关键服务状态:
bash
#!/bin/bash
echo "=== 服务器健康检查 ==="
echo "时间:$(date)"
echo ""
echo "【CPU 使用率】"
top -bn1 | grep "Cpu(s)" | awk '{print "使用率:"$2"%"}'
echo ""
echo "【内存使用率】"
free -m | awk 'NR==2{printf "已用:%sMB, 使用率:%.2f%%\n", $3,$3*100/$2}'
echo ""
echo "【磁盘使用率】"
df -h | grep -E "^/dev/" | awk '{print $6": "$5}'
echo ""
echo "【关键服务状态】"
systemctl is-active nginx mysql docker 2>/dev/null
二、自动备份脚本
数据无价,这个脚本会自动备份网站和数据库:
#!/bin/bash
BACKUP_DIR="/backup/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
# 备份网站文件
tar -czf $BACKUP_DIR/www.tar.gz /var/www/html
# 备份数据库
mysqldump -u root -p'yourpassword' --all-databases > $BACKUP_DIR/all.sql
# 删除 7 天前的备份
find /backup -type d -mtime +7 -exec rm -rf {} \;
echo "备份完成:$BACKUP_DIR"
三、日志清理脚本
服务器日志不清理会占用大量空间:
#!/bin/bash
# 清理 30 天前的日志
find /var/log -type f -name "*.log" -mtime +30 -delete
find /var/log -type f -name "*.gz" -mtime +30 -delete
# 清空当前日志文件但保持文件存在
> /var/log/nginx/access.log
> /var/log/nginx/error.log
echo "日志清理完成"
四、安全巡检脚本
定期检查服务器安全状态:
#!/bin/bash
echo "=== 安全巡检报告 ==="
echo ""
echo "【最近登录记录】"
last -n 5
echo ""
echo "【失败登录尝试】"
grep "Failed password" /var/log/auth.log | tail -10
echo ""
echo "【开放端口】"
netstat -tlnp | grep LISTEN
echo ""
echo "【异常进程】"
ps aux | awk '$3>50 {print $0}'
五、一键部署脚本
快速部署 LNMP 环境:
#!/bin/bash
# 更新系统
apt update && apt upgrade -y
# 安装 Nginx
apt install nginx -y
# 安装 MySQL
apt install mysql-server -y
mysql_secure_installation
# 安装 PHP
apt install php-fpm php-mysql -y
# 配置完成
echo "LNMP 环境部署完成!"
使用建议
定时执行:将脚本添加到 crontab 定期执行
日志记录:建议将脚本输出重定向到日志文件
权限控制:确保脚本只有 root 或特定用户可以执行
测试验证:在生产环境使用前先在测试环境验证
结语
自动化是运维的核心竞争力。这些脚本都是我多年实践总结的,希望能帮你提升工作效率。如果你有更好的脚本,欢迎在评论区分享!