Linux下nginx日志文件删除但是空间不释放没变化,主要原因就是这个文件虽然被删除了,但是系统里还有进程在使用这个文件,系统认为文件还在用,就没有立即释放空间。

只要有程序在读取这个文件,那么文件还是存在,没有删除掉文件出在在读取的状态,还是占用磁盘空间。

可以通过查看当前文件被哪些进程使用,但是文件名已经没有了,我们只能通过lsof这个命令列出所有的删除状态文件

[root@local ~]# lsof |grep deleted
nginx      4699      root   39w      REG              253,0   19307778   10835682 /var/nginx/logs/access.log (deleted)

除了上述,lsof还可以查看当前目录文件被哪些进程使用

lsof  /xx/

lsof /var/log/nginx/access.log


通过上述,可以判断出access日志文件正在被使用,解决方式很简单,只需重启一下nginx进程即可

nginx -s reload 执行,即可释放,而且不影响业务,当然简单粗暴也可直接kill掉nginx进程,在启动也可以 kill -9  pid或者更粗暴的

killall nginx


还有一种更简单方法就是,不要删除文件,直接把文件清空,这样也不需要重启nginx或者杀掉nginx进程

echo "" > access.log即可