Sys*_*inB 6 pipe rsyslog apache-2.4
尝试登录到中央 syslog 服务器,或者直接使用 Apache 的 ErrorLog 管道到记录器,或者让 syslog 转发,但没有任何工作,并且错误对我来说没有意义。我可以让自定义日志工作,但不能让 ErrorLog 工作。在 Ubuntu 14.04 和 rsyslogd 7.4.4 上使用 Apache/2.4.7。
在我的 vhost 中配置(记录器选项后有和没有空间没有区别):
LogLevel warn
ErrorLog "|/usr/bin/tee -a /var/log/apache2/error.log | /usr/bin/logger -tapache_err -plocal1.error"
CustomLog "|/usr/bin/logger -p local4.warning -t apache" combined
Run Code Online (Sandbox Code Playgroud)
然后得到这个错误:
/usr/bin/tee: invalid option -- 't'
Run Code Online (Sandbox Code Playgroud)
也试过(有和没有双引号):
ErrorLog "|syslog:local1"
Run Code Online (Sandbox Code Playgroud)
但后来得到:
(2)No such file or directory: AH00089: Couldn't start ErrorLog process 'syslog:local1'.
AH00015: Unable to open logs
Run Code Online (Sandbox Code Playgroud)
甚至尝试过:
ErrorLog "| /usr/bin/tee -a /var/log/apache2/error.log | nc -u -j xxx.xxx.xxx.xxx 514"
Run Code Online (Sandbox Code Playgroud)
但随后 tee 仍在抱怨:
/usr/bin/tee: invalid option -- 'u'
Run Code Online (Sandbox Code Playgroud)
为什么在tee
第二个管道之后选择选项,我能做些什么来阻止它?我是一个但卡住了,谷歌不是我的朋友,任何其他建议表示赞赏。
第一个管道是Apache fork一个新命令的代码,但它可能不是fork一个全新的shell,它允许你使用一个新的管道,而是执行命令,所以一切都被视为一个命令参数,包括新管道等。您可以使用两种方法将其包装到外壳中来绕过它,一种是明确的:
ErrorLog "|/bin/sh -c 'tee ... | logger ...'"
Run Code Online (Sandbox Code Playgroud)
另一个是隐式的,使用前缀关键字|$
:
ErrorLog "|$tee ... | logger ..."
Run Code Online (Sandbox Code Playgroud)
根本原因是 Apache 2.4 中的更改,参见。http://httpd.apache.org/docs/2.4/upgrading.html:
在 Unix 平台上,使用 ErrorLog 或 CustomLog 配置的管道日志命令在 2.2 及更早版本中使用 /bin/sh -c 调用。在 2.4 及更高版本中,直接执行管道日志命令。要恢复旧行为,请参阅管道日志记录文档。
归档时间: |
|
查看次数: |
6604 次 |
最近记录: |