【问题标题】:Log rotation: application do not write to truncated new log file日志轮换:应用程序不写入截断的新日志文件
【发布时间】:2019-07-15 00:55:45
【问题描述】:

我相信你们都做得很好。

我们计划对以下文件实施日志轮换。 stdout.log

我们使用下面的日志轮换配置文件。

/usr/local/rms/kafka/kafka-connect-fluentd/stdout.log {
    daily
    rotate 7
    maxsize 100M
    minsize 10M
    copytruncate
    delaycompress
    compress
    notifempty
    missingok
}

我们注意到文件正在旋转并且文件被截断。但应用程序不会将日志写入新文件。 我们尝试发送 HUP 信号,但没有成功。

-rw-r--r-- 1 appuser appuser 8.2M Feb 20 03:11 stdout.log.4.gz
-rw-r--r-- 1 appuser appuser 4.0M Feb 20 23:48 stdout.log.3.gz
-rw-r--r-- 1 appuser appuser 7.6M Feb 20 23:49 stdout.log.2.gz
-rw-r--r-- 1 appuser appuser 2.1G Feb 21 03:39 stdout.log.1
-rw-r--r-- 1 appuser appuser 2.2G Feb 21 14:15 stdout.log

应用程序本身没有重新加载选项,当我们需要重新加载或重新启动应用程序时,我们会停止应用程序并启动应用程序。

我们使用下面的命令来启动应用程序

nohup connect-standalone ${BASE}/connect-standalone.properties 
${BASE}/FluentdSourceConnector.properties >& ${BASE}/stdout.log &

我们使用下面的命令来杀死应用程序

kill -9 <processid>

对于这种情况,我们如何实现日志轮换机制?

【问题讨论】:

  • &gt;&amp; ${BASE}/stdout.log - 您希望在每次重启时截断日志?最好使用标准的2&gt;&amp;1 &gt;&gt; ${BASE}/stdout.log 然后使用非标准的&gt;&amp;
  • @KamilCuk 这完全帮助并解决了我的问题。如果您不介意,请您稍微详细说明一下

标签: linux logrotate log-rotation


【解决方案1】:
>& FILE

obsolete syntax 是:

> FILE 2>&1

命令的&gt; FILEredirects标准输出到名为FILE的文件。但是,在此之前,“如果文件不存在,则创建它;如果存在,则将其截断为零大小”。

因此,每次您重新启动命令时,您的文件都会(正确地)被 shell 截断。你想要的是附加到文件中。通过使用&gt;&gt; 重定向来做到这一点。包括你想同时重定向标准输出和标准错误,使用:

2>&1 >>FILE

2&gt;&amp;1 将 stderr 重定向到 stdout,&gt;&gt;FILE 将 stdout 附加到 FILE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多