一个flask网站,当它删除一个文件(os.remove("abc.txt"))时,文件被删除但空间没有被回收

问题描述

该程序是一个标准的烧瓶程序,它会在初始化过程中进行一些清理工作。在使用 os.remove("abc.txt") 的 cleanup() 过程中,我注意到该文件已被删除,但并未被操作系统回收。 我同时使用“python website.py”和“gunicorn website:app”来运行该应用程序,并且在 Linux 环境中都存在相同的问题。在 MacOS 中,我无法重现它。

文件是 os.remove 后,它不再列在“ls”命令中,而是当我运行时

lsof | grep deleted

我仍然可以看到这个文件被列为已删除但被 python 应用程序打开。

因为这个文件已经是“os.remove”,所以没有列在ls命令中,du不会计算这个文件。 但是如果这个文件足够大,df 命令会显示这个文件的空间还在被占用,没有被回收。因为这个文件仍然“被烧瓶应用程序打开”,正如 lsof 程序声称的那样。

一旦我停止运行 Flask 应用程序,lsof 将没有此文件,并且空间将被回收。

通常当文件太小,或者应用程序频繁停止或重新启动时,您不会注意到空间被占用。但这对于保持空间来说并不是很合理。我希望该网站可以运行多年。

在 Internet 上搜索“打开但已删除的文件”时,大多数建议是“找到该应用程序并杀死它”。有没有办法让 Flask 应用程序保持运行而不重新启动它?我的应用程序实际上并没有“打开”这个文件,只是简单地 os.remove 它。

关于如何删除文件并立即收回空间的建议?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)