在 node.js 重新启动之前不会删除文件/目录

Posted

技术标签:

【中文标题】在 node.js 重新启动之前不会删除文件/目录【英文标题】:Files/directories not deleting until node.js restarts 【发布时间】:2016-04-04 02:02:34 【问题描述】:

我有一个大型 node.js 项目,它处理 linux redhat 文件系统相当多,并且由 PM2 管理。我正在使用 fs 和 rimraf 在 redhat AWS 临时驱动器上进行磁盘清理。

运行所有磁盘清理操作时,文件会被删除,但 node.js 会保持打开状态,直到重新启动。使用df 表明磁盘已满,但du 表明磁盘是干净的,这是有道理的。

据我了解,在使用fs时,如果使用fs.open,则需要调用fs.close,但这些功能从未使用过。我正在使用的 fs 操作是:

fs.writeFile fs.readdirSync fs.lstatSync fs.existsSync fs.mkdirSync fs.chownSync fs.unlink fs.rmdirSync fs.writeFile fs.createReadStream fs.createWriteStream

Rimraf 也被使用了,但是查看他们的代码,我认为这不是问题。

根据文档,我相信所有这些功能都会自行关闭,但如果有人知道我没有看到的内容,我们将不胜感激。

我的另一个担心是pm2 以某种方式保持文件打开,这可能吗?

【问题讨论】:

你使用的是哪个节点版本? 【参考方案1】:

fs.createWriteStream 需要手动 fs.close()。 fs.createReadStream 也需要它,除非你设置了autoClose 选项然后一直读取文件直到结束或出错。

【讨论】:

fs.close()fs.destroy() 是读取流的首选方法吗? 有趣。似乎没有记录的方法,但是阅读并讨论了源代码的人suggeststream.destroy()

以上是关于在 node.js 重新启动之前不会删除文件/目录的主要内容,如果未能解决你的问题,请参考以下文章

修改html文件时Nodemon不会重新启动

Node.js:如何重新加载模块

node.js - 错误:ENOENT:没有这样的文件或目录,取消链接

Nodemon:是不是可以仅在后端文件中而不是在静态前端文件中重新启动 Node js 服务器?

XCConfig 在 Xcode 重新启动之前不会刷新

node工具之nodemon