从 CGI 脚本调用时 goaccess 将不会运行

从 CGI 脚本调用时 goaccess 将不会运行

我正在尝试制作一个 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

相关内容