我正在尝试制作一个 CGI 脚本(用于 nginx),它输出一个 html 页面,其中包含我的服务器的使用统计信息。我正在使用 goaccess 0.7.1 和 CentOS 5 x86。
stats.sh
我已将 nginx 配置为针对端口 8080 上的请求运行 bash 脚本 ( )。
bash 脚本如下所示:
#!/bin/bash
cat /var/log/nginx/mydomain.access.log | goaccess -a > stats.html
echo Content-Type: text/html
echo Content-Length: $(stat -c%s stats.html)
echo
cat stats.html
当我跑步时./stats.sh
,一切正常。它在控制台窗口中打印一堆 html 代码,如果我打开 stats.html,我会看到一堆 html 代码。
问题是,当我尝试访问时http://www.mydomain.com:8080/
,我只是得到一个空白页。现在,当我在服务器上打开 stats.html 时,它完全是空的。
我已确认以下权限:
stats.sh
:-rwxr-xr-x
stats.html
:-rw-rw-rw-
goaccess
:-rwxr-xr-x
我还知道 CGI 工作正常,因为如果我修改stats.sh
为仅输出内容stats.html
(而不写入文件),那么当我点击http://www.mydomain.com:8080/
;时它工作正常。它只是发送stats.html
之前的任何数据。所以在 CGI 脚本中调用 goaccess 出了问题。有谁知道为什么?
更新
我也尝试过这个:
echo "<!DOCTYPE hmtl><html><body>TEST</body></html>" > stats.html
当我点击 时它工作正常,所以从 FastCGIhttp://www.mydomain.com:8080/
运行时出现问题。goaccess
goaccess
我还尝试指定( )的完整路径/usr/local/bin/goaccess
:
/var/log/nginx/mydomain.access.log | /usr/local/bin/goaccess -a >stats.html 2>stats.err
但这也行不通。
答案1
mydomain我终于让它工作了!主要问题是我的.goaccessrc
文件。我愚蠢地在 中创建了这个文件/root
,所以显然非 root 用户无法读取它。我把它移到了/etc
现在工作正常。这是我的 bash 文件的最终代码:
#!/bin/bash
cat /var/log/nginx/mydomain.access.log | /usr/local/bin/goaccess -a -p /etc/.goaccessrc >stats.html 2>stats.err
echo Content-Type: text/html
echo Content-Length: $(stat -c%s stats.html)
echo
cat stats.html
确保运行chmod 666 stats.err
。