我的Google-Fu让我如此接近,但还不够完美,我想我在Linux中太绿了,把它们放在一起。
我有一个非常大的> 200GB的日志文件,仍然被写入。 Logrotate在磁盘空间可能成为问题之前不会及时得到它。 另外,我不想logrotate另一轮logrotate ,因为我不希望它在其configuration中影响所有其他目标。 我已经在我的logrotate.conf文件中添加了新的节:
/log/myDevice/myDevice.log { compress daily rotate 360 maxage 360 missingok compresscmd /usr/bin/xz dateext compressext .xz copytruncate olddir /log/archive/myDevice }
我想手动做这些事情:
split :将当前日志分割成更小的块 xz :压缩到存档文件夹 我可以split(1)和xz(1)就好,但是当我试图抓住目标文件,没有骰子。
我尝试了sudo mv myDevice.log ZmyDevice.log && touch myDevice.log ,但syslog-ng只是移动原始文件(及其新名称),并保持愉快的写道。 自从我思考syslog-ng如何引用该文件以来,这个问题就有了一些改进。
所以我想弄清楚如何做一些手动的copytruncate ,以便将文件切换到原来的位置,并让syslog-ng保持原样。
移动文件,然后发送一个SIGHUP到syslog-ng进程:
杀-HUP
这将导致它重新打开所有打开的文件,从而释放刚刚移动/重命名的文件,并允许您继续。 然后它会打开/log/myDevice/myDevice.log新鲜并开始写入。
find哪个进程打开文件: fuser /path/to/file 。 然后使用kill -SIGSTOP暂停正在写入文件的进程。 然后旋转文件,复制它,截断它,无论你需要做什么,然后用kill -SIGCONT恢复进程。