【问题标题】:Reduce Size of .forever Log Files Without Disrupting forever Process减少 .forever 日志文件的大小而不中断永远的进程
【发布时间】:2016-12-13 11:14:48
【问题描述】:
forever 创建的日志文件(在/root/.forever 中)已经达到很大的大小,几乎快要填满硬盘了。
如果在forever 进程仍在运行时删除日志文件,forever logs 0 将返回undefined。恢复当前forever 进程的日志记录的唯一方法是再次stop 它和start 节点脚本。
有没有办法在不中断日志记录或forever 进程的情况下只修剪日志文件?
【问题讨论】:
标签:
node.js
logging
forever
【解决方案1】:
因此,Foreverjs 将继续写入相同的文件句柄,并且理想情况下会支持允许您向其发送信号并旋转到不同文件的功能。
如果不这样做,则需要更改 Forever.js 包的代码,您的选项如下所示:
命令行版本:
- 进行备份
- 清空文件
cp forever-guid.log backup && :> forever-guid.log;
这有轻微的风险,如果您快速写入日志文件,您最终会在备份和归零之间写入一条日志行,从而导致日志行丢失。
使用带复制截断的 Logrotate
您可以设置 logrotate 以监视永久日志目录以根据文件大小或时间自动复制和截断。
让你的节点代码处理这个
您可以让您的日志记录代码查看日志文件的行数,然后进行复制截断 - 这样可以避免潜在的数据丢失。
编辑:我原本以为split 和truncate 可以完成这项工作。他们可能可以,但实现看起来真的很尴尬。 Split 没有将文件拆分为短文件(原始日志)和长文件(备份)的好方法。 Truncate(除了它并不总是安装的事实之外)不会重置写指针,所以永远只是写与它应该有的相同的字节,导致奇怪的数据。
【解决方案2】:
您可以截断日志文件而不会丢失其句柄 (reference)。
cat /dev/null > largefile.txt