VPS清理垃圾方法
一、清理系统日志
du -h /var/log
这是系统默认的日志目录,如果不改 SSH 端口,和禁用密码登陆,必然会产生大量日志,btmp、syslog、auth.log 这几个日志能大到占用 G 以上的空间。
你要用的是 echo 来清空日志,这样就可以马上释放被占用的空间
echo > /var/log/btmp
echo > /var/log/syslog
echo > /var/log/auth.log
此外,即便你已经修改了 SSH 端口和禁用了密码登陆,没有上面 3 个日志占用空间,也会出现是 /var/log/journal 在吃硬盘,可以通过以下命令限制占用大小,下面 100M 就是限制日志最大为 100M(可以根据你个人情况修改)
journalctl --vacuum-time=1d && journalctl --vacuum-size=1M && systemctl restart systemd-journald.service
二、清理 Docker 日志
1. 查看各个容器的 log 文件大小
find /var/lib/docker/containers/ -name *-json.log |xargs du -sh
2. 执行清理
$ cat /dev/null > /var/lib/docker/containers/dfe25896671f0def031c5ffeb12dd335f7f54212c6ca5d3aca1c3f50b5e1eec4/dfe25896671f0def031c5ffeb12dd335f7f54212c6ca5d3aca1c3f50b5e1eec4-json.log
3. 脚本化清理
#!/bin/sh
echo "======== start clean docker containers logs ========"
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
echo "clean logs : $log"
cat /dev/null > $log
done
echo "======== end clean docker containers logs ========"
chmod +x clean_docker_log.sh
./clean_docker_log.sh
备注:如果 docker 容器正在运行,那么使用 rm -rf 方式删除日志后,通过 df -h 会发现磁盘空间并没有释放。原因是在 Linux 或者 Unix 系统中,通过 rm -rf 或者文件管理器删除文件,将会从文件系统的目录结构上解除链接(unlink)。如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。正确姿势是 cat /dev/null > *-json.log,当然你也可以通过 rm -rf 删除后重启 docker。
4. 设置 Docker 容器日志大小
1.新建/etc/docker/daemon.json
,若有就不用新建了。添加log-dirver和log-opts参数,样例如下:
# vim /etc/docker/daemon.json
{
"log-driver":"json-file",
"log-opts": {"max-size":"500m", "max-file":"3"}
}
max-size=500m,意味着一个容器日志大小上限是500M,
max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json。
2.然后重启docker的守护线程
命令如下:
systemctl daemon-reload
systemctl restart docker
【需要注意的是:设置的日志大小规则,只对新建的容器有效】