Meh*_*ran 22 linux redirect logrotate
我有一个简单的脚本,它输出一堆日志到屏幕上,我将 STDOUT 通过管道传输到一个文件来存储日志。由于这个脚本运行时间很长,我需要轮换日志文件,以便将它们放入更小的更易于管理的文件中。
我面临的问题是,一旦logrotate将当前日志文件移动到一个新文件中,新创建的日志文件就不再填充日志了。似乎一旦原始日志文件被删除,它的文件处理程序就会丢失并且重定向将不再起作用。
我还发现这篇文章与我有同样的问题,并声称可以通过使用>>而不是>重定向输出来修复它。我测试了他的解决方案,但对我不起作用。有谁知道如何保持重定向工作?
use*_*517 25
您应该在日志文件的 logrotate 配置中使用 copytruncate 指令。
copytruncate 在创建副本后原地截断原始日志文件,而不是移动旧日志文件并可选择创建新日志文件。当某些程序无法被告知关闭其日志文件并因此可能永远继续写入(附加)到前一个日志文件时,可以使用它。请注意,复制文件和截断文件之间的时间片非常短,因此可能会丢失一些日志记录数据。使用此选项时,创建选项将无效,因为旧日志文件保留在原位
作为替代方案,您还可以:
在脚本中使用 logger 实用程序而不是管道,并使用专用工具(例如 local5),例如:
logger -p local5.info -t myscriptname "this is some log data"
配置 syslog 以将此工具写入想要的日志文件,例如 (rsyslog.conf):
local5.* /var/log/mylogfile
为此日志设置 logrotate 规则。
| 归档时间: |
|
| 查看次数: |
9818 次 |
| 最近记录: |