Apache 两次记录到 /proc/1/fd/1

问题描述 投票:0回答:1

我正在尝试使用 tee 登录两个位置:

  • 持久存储中的文件
  • Docker 标准输出

来自 VirtualHost 配置的错误日志行:

ErrorLog "|/usr/bin/tee -a /var/log/apache/error.log /proc/1/fd/1"

现在的问题是错误在 /proc/1/fd/1 中记录了两次(如 docker 日志所述),但错误只在 /var/log/apache/error.log 中记录一次

我也尝试过从 cli 运行:

echo 123 | /usr/bin/tee -a /tmp/test /proc/1/fd/1

这仅成功地将一次写入文件和标准输出。

是否有某种原因导致 Apache 日志写入两次到 /proc/1/fd/1 而只记录一次到文件并且 /usr/bin/tee 也按预期工作?

docker apache2
1个回答
0
投票

tee
本身写入标准输出。

ErrorLog "|/usr/bin/tee -a /var/log/apache/error.log /proc/1/fd/1"

因此此日志记录将写入

  1. apache 的标准输出
  2. 错误日志
    /var/log/apache/error.log
  3. /proc/1/fd/1
    .

如果你在 docker 的前台运行 apache,它也会将 (1) 写入 docker 容器的 stdout。从而使其出现两次。

解决方案是不要写入 /proc/1/fd/1,因为 tee 已经写入了

ErrorLog "|/usr/bin/tee -a /var/log/apache/error.log"

您进行的测试

echo 123 | /usr/bin/tee -a /tmp/test /proc/1/fd/1

也写3次,但写到3个不同的位置

  1. 你的终端(假设你从终端运行它?)
  2. /tmp/测试
  3. docker 标准输出 (
    /proc/1/fd/1
    )

以下还将“123”写入 docker 输出两次:

$ docker run alpine sh -c 'echo 123 | /usr/bin/tee -a /tmp/test /proc/1/fd/1'
123
123
© www.soinside.com 2019 - 2024. All rights reserved.