旋转由记录到stdin的进程生成的日志

Modified on: Fri, 12 Jul 2019 01:20:02 +0800

我有一个长时间运行的进程,它将其日志文件写入stdout。我想将此输出保存到不同的文件,自动维护这些文件(如删除/存档旧文件),而无需重新启动主进程。

解决方案是将输出发送到文件(process > log.txt),并在其上使用logrotate,但logrotate需要重启程序,这是不可能的。

另一个是将输出传递给cronologprocess | cronolog),但在这种情况下,旧文件不会被删除/存档,这意味着我有制作一个程序,为我做维护。

最好的是能够使用这两个实用程序,因为使用cronolog我不需要重启进程,而logrotate将维护旧的日志文件完全按照我的意愿。有没有办法让这两个程序相互协作?如果没有,这个问题的解决方案是什么?

作者:SztupY

最佳答案

来自DJB Multilog .to / daemontools.html“rel =”nofollow noreferrer“> daemontools 可以(几乎)完全按照你的要求做。我所知道的唯一缺点是,没有多少发行版带有daemontools的包。< / p>

如果您不使用svc(daemontools的一部分)管理应用程序,则必须找到一种方法将输出通过管道传递给

这样的命令

multilog t s1048576 n100 ./my_log_directory

这转换为:

  • t:插入一个tai64n时间戳(可以通过tai64nlocal转换为可读时间)
  • s1048576:当日志文件增长到1MiB时将其旋转
  • n100:保留不超过100个旋转的文件
  • ./my_log_directory:以./开头的任何内容 - 将日志写入该目录

写入的日志将具有文件名current,当multilog旋转日志时,它将被重命名为@&lt;tai64n timestamp&gt;.s,其中filename显示文件旋转的时间。如果文件被安全刷新,则扩展名可以是.s;如果文件被截断,则可以是.u

有关详细信息,请查看链接。

作者:chutz

相关问答

添加新评论