如何为logrotate编写postrotate脚本,将日志文件的最后一部分复制到另一部分

时间:2016-03-04 23:34:50

标签: logrotate

所以我试图使用logrotate旋转我的日志。我目前正在使用copytruncate但它在旋转日志时没有捕获我的所有数据。我可以看到约。 lat 50行的数据正在丢失,这是复制截断规范所期望的。

我做了一些研究,有些人建议我使用postrotate脚本并在其中编写一个脚本,它会复制我的日志文件的最后一部分并在旋转时将其粘贴到新生成的文件中,这样我就不会丢失任何数据(虽然我可能有重复,这很好)。 有谁知道我怎么做到这一点?我是任何类型的脚本写作的新手,所以任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

正如here解释的那样,帖子旋转以这种方式实现,例如:

 /var/log/mylogfile{
           rotate 5
           weekly
           postrotate
                                     /sbin/killall -HUP syslogd
           endscript
       }

在此示例中,将在旋转日志文件后执行/sbin/killall -HUP syslogd命令:

  

postrotate / endscript :postrotate和endcript之间的界限(两者都必须                 在日志文件之后执行                 旋转。这些指令可能只出现在日志中                 文件定义。参见prerotate。

根据这个,您应该编写一个脚本,将日志文件中的某些行复制到新创建的文件中。

您的最终脚本将如下所示:

/var/log/mylogfile {
               rotate 5
               weekly
               postrotate
                                         tail -n 50 mylogfile >> mylogfile0
               endscript
           }

在脚本中,我将最初的50行从mylogfile(原始日志文件)复制到mylogfile0,这是新创建的文件。