Linux - Operations
Created by : Mr Dk.
2020 / 04 / 04 01:09
Ningbo, Zhejiang, China
日志文件清除
之前有一个问题困扰我很久:在 Linux 上开始运行一个服务,但我又要查看日志。比如平时会用 frp 做内网穿透。一旦出现网络波动,断开、自动重连、断开、自动重连......每次连接都会产生日志记录。
为了方面查看服务状态,我将服务的日志输出重定向到一个文件中。随着这个日志文件越来越大,磁盘渐渐放不下了。我头一铁就只能把这个日志文件删掉了,但是为了删这个文件,frp 服务必须得停下。如果运行 frp 客户端的内网机器不在我身边,客户端看到服务端 frp 服务已经停止就不再自动重连。所以,就算我重新启动了 frp 服务,还是和我的远程机器失联了。
有没有办法可以在不停止服务 (不中断程序) 的前提下,将磁盘上的日志文件清空?通过下面的命令就可以:
$ echo ' ' > server.log
通过这种方法,磁盘空间会被立刻释放;同时进程也可以继续向文件写入日志,不必重启服务。如果日志文件要留存别处,可以先 copy 一份日志,然后再敲上述命令。
从 Linux 内核的角度考虑一下这是怎么实现的呢? 🤔
猜测:
- 内核将该文件的所有磁盘块都直接置为无效 (bitmap 设置为 0?)
- 分配新的磁盘块,并写入
echo
的内容- 将
server.log
文件的 inode 的起始磁盘块号 (i_zone[0]
) 设置为这个新的磁盘块号
情景 Linux--如何解决服务器日志过多导致的磁盘空间不足?
查看端口占用
查看端口占用情况:
$ lsof -i
查看某一端口的占用情况:
$ lsof -i:8090