如何将logrotate与输出重定向一起使用?

时间:2016-02-08 19:45:15

标签: ruby linux bash logging logrotate

我目前正在运行一个ruby脚本,它将HTTP流量记录到stdout。由于我希望日志是持久的,因此我将输出重定向到ruby ruby_script.rb >> /var/log/ruby_script.log的日志文件。但是,日志现在变得非常大,所以我想使用以下内容实现logrotate:

"/var/log/ruby_script.log" {
  missingok
  daily
  rotate 10
  dateext
}

但是,在运行logrotate --force -v ruby_script之后,其中“ruby_script”是logrotate.d配置文件的名称,没有为要写入的脚本创建新文件,而是写入旋转的文件。我猜这种行为的发生是因为>>传递的文件描述符无论移动它都会粘在文件上,并且在第一次调用后与文件名无关。因此,我的问题是,实现我正在寻找的功能的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

查看选项copytruncate

来自man logrotate

  

copytruncate:创建副本后,将原始日志文件截断为零,而不是移动旧日志文件和                 可选地创建一个新的。当某些程序无法被告知关闭其日志文件时可以使用它                 继续永久写入(追加)到上一个日志文件。请注意,之间的时间片非常小                 复制文件并截断​​它,因此一些日志记录数据可能会丢失。使用此选项时,将创建选项                 将无效,因为旧的日志文件保持不变。