从标准日志中旋转日志

我有一个程序需要一个参数来允许我们使用的硬件进行额外的debugging。

日志只是写到标准输出,所以通常我们只是将标准输出到一个文件,即./myprog -AddDebug> myfile.txt,但是现在我们需要保持这个日志logging能够find一个我们通常不会这样做是寻找一种方法来旋转日志,以确保服务器磁盘空间不会用完。

我已经使用内置的logrotate函数在Linux中添加一个configuration文件到/etc/logrotate.d/mytrace其中包含以下内容:

/home/myprog/mytrace.txt { rotate 5 size 2M copytruncate olddir trace_archive } 

当我运行/ usr / sbin / logrotate /etc/logrotate.conf时,跟踪文件被移动到archvie,但是原来是重新创build的,但是显然pipe道丢失了,所以文件不再被写入。 然后,我试图用copytruncatereplacecreate ,它仍然将文件放在存档中,但原始文件只是不断增长。

第二个问题,只有当我手动运行logrotate函数时文件才会被存档,当达到文件大小时它不会自动触发。

任何帮助,你可以提供这两个问题,将不胜感激。

UPDATE

我已经设法得到它的一部分工作,为了让copytruncate工作文件需要以附加模式打开,所以而不是./myprog -AddDebug > myfile.txt这应该改为./myprog -AddDebug >> myfile.txt

我现在唯一的问题是,如果我运行logrotate -v /etc/logrotate.conf ,那么只能进行轮换,所以我怎样才能让它自动完成呢?

看起来好像我将不得不手动创build每隔几分钟运行一次的cronjob,以确保日志被轮转,而不是自动处理。

谢谢

无论是简单地pipe道| logger | logger ,并使用syslog来pipe理你的日志文件。

替代一个不错的帮手程序是包含在Apache rotatelogs分配,这需要标准input,将为您写和旋转日志文件rotatelogs例如pipe你的输出到| /usr/sbin/rotatelogs /home/myprog/myproglog.%Y-%m-%d-%H_%M_%S 2M | /usr/sbin/rotatelogs /home/myprog/myproglog.%Y-%m-%d-%H_%M_%S 2M并使用唯一顺序文件名创build2 MB的日志文件。

感谢大家的帮助。

我已经使用标准的日志旋转内置到操作系统,并build立了每5分钟运行一次cronjob,这似乎是在我想要的方式工作。

谢谢