Apache 内部服务器错误 [:error] [pid #] 1.0 # in error_log

Apache Internal Server Error with just [:error] [pid #] 1.0 # in error_log

我让 Apache 通过 mod_wsgi 为 Flask 应用提供服务。

该应用程序是一种网络表单,可在提交表单时将字段保存到本地文件。一切 运行 除了偶尔点击表单提交服务器抛出内部服务器错误外,一切都很顺利。到目前为止,我还没有看到任何实际写入文件的内容 - 即使表单提交成功而没有内部服务器错误。我怀疑它与文件写入权限有关。

error_log 中唯一的条目没有任何意义,至少在我未经训练的眼睛看来:

[Tue May 26 22:35:46.401070 2015] [:error] [pid 28335] 1.0 1
[Tue May 26 22:37:33.313577 2015] [:error] [pid 28339] 1.0 1
[Tue May 26 22:38:21.074149 2015] [:error] [pid 28336] 1.0 1
[Tue May 26 22:46:04.284230 2015] [:error] [pid 28338] 1.0 2
[Tue May 26 22:46:04.291985 2015] [:error] [pid 28340] 1.0 2

有什么建议可以进一步缩小调查范围吗?

我试过暂时禁用本地文件保存,它似乎确实解决了问题(当写入文件代码被注释掉时,不会发生内部服务器错误,而至少有十分之一的迭代会得到内部服务器错误取消注释写入文件代码时出现服务器错误)。

写入文件的 python 代码只是对以下内容的调用:

def logtofile(text):
    with open("usagelogs.txt", "a") as myfile:
        myfile.write(text)
    return

正如上面提到的,我一直看不到任何写这篇文章的迹象——尽管我不得不承认我也不确定文件将被写入哪里(它是否与.py 文件,还是其他地方?)

当我在我的本地主机(非生产 Web 服务器)上 运行 时,代码 运行 没问题。

关于生产环境我运行宁: 服务器版本:Apache/2.4.6 (CentOS)


根据目前收到的评论更新:

更改文件路径(如下所示)确实消除了内部服务器错误,但我仍然无法找到 logs.txt 实际存储的位置。有什么提示吗?

dir = os.path.dirname(__file__)
file = os.path.join(dir,'logs.txt')

def logtofile(text):
    with open(file, "a") as myfile:
        myfile.write(text)
    return

更新 2

现解决如下:

  1. 已修改用户和组定义 here
  2. 确定文件正在另存为/var/www/html//logs.txt
  3. 文件由 1 中定义的用户和组拥有。

现解决如下:

  1. 已修改用户和组定义 here
  2. 确定文件正在另存为 /var/www/html/<app name>/logs.txt
  3. 文件由 1 中定义的用户和组拥有。