gpt4 book ai didi

node.js - 截断 STDOUT 被重定向到的文件

转载 作者:太空宇宙 更新时间:2023-11-03 23:43:08 25 4
gpt4 key购买 nike

我有一个 Node 应用程序,它的 STDOUT 被重定向到日志文件:

node app.js > /var/log/app.out

从我的 Node 程序内部,我想重置日志以防止它变得太大。我尝试使用 fs.truncatefs.open('/var/log/app.out', 'w') 来重置其长度,但是当我尝试使用 lsstat 验证文件大小时,文件大小似乎很快重置为 0,然后重置为之前的大小加上新消息(我目前强制输出大量输出)。

root@ubuntu-1304-mike:/var/log# stat app.out
File: ‘app.out’
Size: 5885622 Blocks: 16 IO Block: 4096 regular file
Device: fc00h/64512d Inode: 270560 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2013-09-26 17:20:06.784564421 -0600
Modify: 2013-09-26 17:20:49.088565625 -0600
Change: 2013-09-26 17:20:49.088565625 -0600
Birth: -
root@ubuntu-1304-mike:/var/log# stat app.out
File: ‘app.out’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fc00h/64512d Inode: 270560 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2013-09-26 17:20:06.784564421 -0600
Modify: 2013-09-26 17:20:51.772565702 -0600
Change: 2013-09-26 17:20:51.772565702 -0600
Birth: -
root@ubuntu-1304-mike:/var/log# stat app.out
File: ‘app.out’
Size: 6038458 Blocks: 16 IO Block: 4096 regular file
Device: fc00h/64512d Inode: 270560 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2013-09-26 17:20:06.784564421 -0600
Modify: 2013-09-26 17:20:53.640565755 -0600
Change: 2013-09-26 17:20:53.640565755 -0600
Birth: -

STDOUT 似乎正在将其缓冲区重写到文件中(无论缓冲区有多大)。

如何截断 STDOUT 主动重定向到的文件,而不破坏我的 Node 应用程序?

最佳答案

It seems that STDOUT is re-writing it's buffer to the file (regardless of how large the buffer is).

没有人重写缓冲区,它已经写入磁盘了。当应用程序完成写入内容时,它会记住完成的位置,并稍后从该位置开始。这不是一个 Node 问题,你对此无能为力,这就是unix管道的工作方式(除非有一些丑陋的黑客来倒回我不知道的管道)。

How can I truncate a file that STDOUT is actively being redirected to, without breaking out of my node app?

不要使用 stdout 重定向并写入文件。如果您无法修改您的应用程序,请编写另一个使用更聪明的方法的应用程序并将标准输出重定向到它,如下所示: node app.js | node write-stdin-to-app.out.js

关于node.js - 截断 STDOUT 被重定向到的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19040406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com