服务器清理清单:别等磁盘满了才想起运维
服务器平时“能跑”,不代表它是干净的。
它更像一个没人定期打扫的房间:日志越堆越多,旧依赖没人删,临时脚本忘在角落,虚拟环境占着空间,crontab 里还有几年前随手加的任务。直到某天磁盘满了,服务启动失败,你才发现它已经乱了很久。
这篇原来只是一次周末清理流水账。现在重写成一份我以后真正能复用的清单:一人运维,最重要的不是会不会救火,而是能不能别总等火烧起来才动。
先看系统盘,不要凭感觉
清理服务器第一步,不是马上删文件,而是先搞清楚空间到底被谁吃了。
我现在会先跑:
1 | |
重点看几个地方:
| 位置 | 常见问题 |
|---|---|
/var/log |
服务日志没有轮转,单文件越写越大 |
/var/lib/docker |
镜像、容器、volume 堆积 |
/tmp |
临时文件长期没清 |
| 项目目录 | 构建产物、缓存、上传文件混在一起 |
| 用户 home | 压缩包、备份、旧仓库忘删 |
不要一上来就 rm -rf。先定位,再处理。
很多时候真正占空间的不是当前服务,而是几个月前试过、后来忘掉的东西。
日志要限额,不要靠自觉
日志最容易把系统盘拖死。
临时处理可以用:
1 | |
但这只是打扫现场,不是解决问题。
更应该检查两件事:
- systemd journal 有没有限额;
- 应用自己的日志有没有轮转。
如果某个 Node/Python 服务一直把日志追加到一个文件里,几个月后它一定会变成炸弹。要么交给 logrotate,要么让进程管理器处理日志轮转。
一个简单的原则:任何会无限增长的文件,都必须有上限。
旧依赖和旧环境要敢删
服务器上最常见的垃圾,是“当时调试用、后来忘了”的依赖。
比如:
- 编译安装留下的源码包;
- 旧版本 Node/Python 环境;
- 没再使用的虚拟环境;
- npm/pip 缓存;
- 早就停掉的项目目录;
- 临时下载的二进制文件。
可以先列:
1 | |
删之前确认两件事:项目是否还在跑,路径是否被 systemd/crontab 引用。
能用包管理器清的,就别手动乱删:
1 | |
手动删项目目录前,最好先把服务停掉或确认它不在运行。
crontab 和 systemd 要定期盘点
服务器乱到最后,通常不是文件乱,而是“没人知道到底有哪些东西会自动跑”。
我现在会检查:
1 | |
重点问:
- 这个定时任务还需要吗?
- 它写日志到哪里?
- 失败会通知谁?
- 它依赖的路径还存在吗?
- 它会不会和新系统重复执行?
之前 AI 助手迁移时,最麻烦的就是旧实例和新实例同时跑定时任务。服务器清理也一样:过期 cron 不只是占地方,它可能真的还在执行。
服务状态要和项目文档对得上
很多服务器问题的根源是:机器上跑着一堆服务,但文档里没有。
以后每个长期服务至少要记录:
| 项目 | 应该记录什么 |
|---|---|
| 服务名 | systemd unit / pm2 名称 |
| 代码目录 | 仓库位置和分支 |
| 端口 | 本地端口和反代域名 |
| 数据目录 | 数据库、上传文件、缓存在哪里 |
| 日志位置 | 怎么查日志,是否轮转 |
| 重启方式 | 正确 restart 命令 |
| 停用方式 | 停掉后有没有副作用 |
没有文档的服务,迟早会变成“谁也不敢删”的遗留物。
一份月度清理清单
以后如果要做服务器卫生检查,可以按这份来:
1 | |
这份清单不用每天跑。一个月跑一次,就能少很多突然救火。
最后
服务器维护最烦人的地方在于,它经常看起来“不创造新价值”。
你清日志、删旧包、整理服务,用户看不到新功能,项目也没有新增页面。但如果不做,某天磁盘满了、日志写爆了、旧任务重复跑了,它会用更难看的方式提醒你。
一人做项目,运维卫生也算产品工作的一部分。
别等系统盘红了,才想起自己还有一台服务器要照顾。