前言
运维工作中,重复性任务占据了很大一部分时间——日志清理、数据备份、服务监控、批量更新……这些事情如果靠人工一个个去做,不仅效率低,还容易出错。Shell脚本是Linux运维自动化最基础也最强大的工具,写好一套脚本,能让你从繁琐的重复劳动中解放出来。
本文整理了10个实战向的Shell脚本,覆盖监控、备份、日志、批量操作等核心场景,每个脚本都可以直接用,也可以根据你的环境改一改。
一、服务器性能监控脚本
每天上班第一件事就是看服务器状态,CPU、内存、磁盘这三项最常用。与其每次手动敲命令,不如写成脚本定时跑。
这个脚本可以把结果重定向到日志文件,配合crontab每天定时执行,随时掌握服务器健康状态。核心思路是:用top取CPU使用率,用free算内存占比,用df检查磁盘使用率,最后统一格式化输出。
二、自动备份MySQL数据库脚本
数据库备份是运维的底线工作,必须自动化、定期化。下面这个脚本支持单库/全库备份,保留最近7天的备份文件,自动清理过期数据。
核心是使用mysqldump导出数据并通过gzip压缩,同时用find命令定期清理过期文件。备份前先用--single-transaction参数确保InnoDB表的一致性。
三、日志自动清理脚本
服务器跑久了,日志文件会占满磁盘,尤其是Nginx、MySQL、应用的日志。这个脚本自动清理指定目录下超过指定天数的日志文件,支持按文件类型过滤。
关键是find命令的-mtime参数,可以精确控制保留天数。建议日志目录单独挂载分区,避免/分区被写满导致系统故障。
四、磁盘空间告警脚本
磁盘满了会导致服务不可用,这个脚本检查所有挂载点的使用率,超过阈值就发告警(邮件或Webhook),可以放到crontab里每10分钟跑一次。
告警阈值建议设在85%,预留足够缓冲时间。可以接入企业微信或钉钉的Webhook,实现实时推送。
五、批量SSH执行命令脚本
有多台服务器需要同时执行同一条命令时,这个脚本通过SSH批量连接执行,结果汇总输出,适合批量更新、批量检查服务状态等场景。
配合SSH密钥登录使用效果最好,避免每次输入密码。服务器列表格式很简单,每行一个IP即可。注意控制并发数量,避免对目标服务器造成压力。
六、Nginx日志分析脚本
想快速知道今天网站访问量、哪个URL访问最多、有没有异常攻击请求?这个脚本直接分析Nginx的access.log,输出关键统计信息。
用awk提取字段,sort+uniq -c做统计,最后用head取TOP排行。这个思路同样适用于分析其他结构化日志文件。
七、服务自动重启脚本
关键服务(Nginx、MySQL、Redis等)挂掉要能自动拉起来。这个脚本检查服务状态,如果发现服务异常就尝试重启,重启失败则发告警。
注意要加重启间隔和重试次数限制,避免服务持续崩溃时无限重启占用资源。建议在重启前先保留现场日志,方便事后排查原因。
八、服务器安全巡检脚本
安全巡检是定期必须做的工作,这个脚本检查几个关键安全项:可疑登录、新增SUID文件、防火墙状态、SSH配置等,生成巡检报告。
建议每天自动执行一次,报告通过邮件发送。重点关注sshd_config里的PermitRootLogin和PasswordAuthentication两个参数。
九、Crontab定时任务管理脚本
写好的脚本要通过crontab定时执行才能发挥价值。这个辅助脚本帮你快速添加、查看、删除定时任务,避免直接编辑crontab出错。
crontab的时间格式是"分 时 日 月 周",初学容易搞混。建议每个定时任务上面加一行注释说明用途,方便以后维护。
十、系统信息收集脚本
新接手一台服务器,第一件事就是了解它的配置。这个脚本一键收集CPU、内存、磁盘、网络、系统版本等关键信息,输出成报告,方便做资产登记或故障排查。
总结
以上10个脚本覆盖了Linux自动化运维最核心的场景。实际使用时可以根据你的业务需求进行修改和组合,比如把监控脚本和告警Webhook结合起来,把备份脚本和云存储同步结合起来。
Shell脚本的门槛不高,但写好需要积累。建议把常用的脚本统一放在一个目录下,用Git管理版本,逐步形成自己的运维工具库。自动化程度越高,你越有时间去做更有价值的事情。
相关文章:
版权声明
本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论