Skip to main content
 首页 » 编程设计

python之Apache CustomLog 管道到脚本失败

2024年11月01日26qq78292959

我正在尝试将 CustomLog 添加到我的 apache httpd.conf 文件中,该文件将日志格式通过管道传输到脚本中。 test.py 脚本现在非常简单,因为我只是想让它工作。当我从命令行运行脚本时,它完全按预期工作。当 apache 调用脚本时,它以 root 身份调用它。我已经在该脚本上将用户/组设置为 root,作为预防措施,我在脚本上执行了 chmod 777。问题是,一旦我重新启动 httpd,error_log 文件就会开始填满此错误。我什至试图将脚本文件设为空文件,但我仍然收到此错误。作为旁注,我的配置文件中确实有另一个 CustomLog 管道,它可以拆分和旋转我的日志,并且工作得很好。

apache/logs/error_log 输出

AH00106: piped log program '/hwnet/dtg_devel/web/boarddev/applications/test.py' failed unexpectedly 

httpd.conf

LogFormat "%V %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vcombined 
CustomLog "|/hwnet/dtg_devel/web/boarddev/applications/test.py" vcombined   

测试.py

#!/usr/bin/python 
with open("/hwnet/dtg_devel/web/boarddev/applications/test.log", "a") as output_log: 
    output_log.write("Hello World\n") 

系统配置

python: 2.6.6 
apache: 2.4.7 

请您参考如下方法:

我最终发现问题与我的脚本有关。 apache 的工作方式是将脚本作为后台进程启动,并且该进程应该正在运行,以便 apache 可以将新日志推送到其中。我的脚本是以运行一次然后退出的方式编写的。因此,每次 apache 尝试向其推送新日志记录时,它都不会在后台运行以接收它,从而导致错误。