Apache CustomLog 管道脚本失败
我正在尝试在我的apache httpd.conf文件中添加一个CustomLog,它可以把日志格式传递给一个脚本。现在我的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
test.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
1 个回答
3
我最后发现问题出在我的脚本上。Apache的工作方式是,它会把脚本当作一个后台进程启动,这个进程应该一直在运行,这样Apache才能把新的日志信息发送给它。可是我的脚本写得只会运行一次,然后就结束了。因此,每次Apache想要把新的日志记录发送给它时,脚本并没有在后台运行,导致了错误的发生。