如何在打开/实时文件上手动旋转日志而不进行日志旋转?

Cea*_*fin 5 logging syslog logrotate

我的 Google-Fu 已经让我很接近了,但还没有完全实现,我想我对 Linux 还太陌生,无法将这些碎片整合在一起。

我有一个非常大的 >200GB 日志文件,仍在写入。在磁盘空间可能成为问题之前,Logrotate 无法及时处理它。另外,我不想启动另一轮logrotate,因为我不希望它影响其配置中的所有其他目标。我已在我的文件中添加了新的节,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
}
Run Code Online (Sandbox Code Playgroud)

我想手动做这些事情:

  1. copytruncate :获取当前日志文件,但允许 syslog-ng 继续处理当前打开/活动的文件
  2. (不在上面的 logrotate.conf 中) split:将当前日志卷分解成更小的块
  3. xz:压缩到存档文件夹

我可以split(1)而且xz(1)很好,但是当我尝试抓取目标文件时,没有骰子。

我尝试过sudo mv myDevice.log ZmyDevice.log && touch myDevice.log,但 syslog-ng 只是随原始文件(及其新名称)移动并保持愉快的写入。当我思考 syslog-ng 如何引用该文件时,这引起了一些思考。

因此,我试图弄清楚如何编写某种手册,copytruncate以便将文件“就地”剪切到另一个文件,并让 syslog-ng 继续处理它想要的内容。

Cra*_*ell 2

移动文件,然后向 syslog-ng 进程发送 SIGHUP:

杀-HUP

这将导致它重新打开所有打开的文件,从而释放您刚刚移动/重命名的文件并允许您继续。然后它将重新打开 /log/myDevice/myDevice.log 并开始写入。