0

我用 nginx 运行乘客,几个月前我删除了一个用完磁盘空间的 nginx 日志文件,特别是 /var/log/nginx/error.log.1,大小约为 5GB,然后重新配置 logrotate 以保留日志文件大小减小。一切都很好,直到几天后,乘客进程以某种方式回收了已删除的文件(如 lsof +L1 所示)。看起来删除的文件的大小增加了,所以显然它正在被写入。我也不确定它为什么要写入 error.log.1,因为那是一个旋转的日志文件(虽然已经很长时间了,但我不确定我是否将 error.log 重命名为 error.log.1删除/移动东西,这可能与问题有关)通过 touch tmp/restart.txt 重新启动乘客没有'
现在真正奇怪的部分是从那时起系统已经重新启动并且问题仍然存在。几天或几周过去了,然后突然可用磁盘空间缩小,我检查 lsof +L1 并且再次删除了文件。这到底是怎么回事?知道这是如何发生的会很有趣,并且知道我如何能够阻止它再次发生会很有帮助。谢谢。

日志旋转 conf 如下所示: /var/log/nginx/*.log { daily missingok rotate 52 compress delaycompress notifempty create 640 root adm sharedscripts postrotate [ ! -f /var/run/nginx.pid ] || 杀死 -USR1cat /var/run/nginx.pid 结束脚本 }

4

1 回答 1

3

我知道这是一个旧线程,但我的猜测是 nginx 服务重新启动,它释放了已删除日志文件的锁定,因为“突然可用的磁盘空间缩小”(如果你删除一个有打开句柄的文件,它将表现出您描述的行为,直到该句柄被释放)。听起来 logrotate 函数不会导致 nginx 释放句柄?

于 2012-07-26T17:43:25.037 回答