N. *_*mon 8 python mod-wsgi flask
Apache v2.4.12-2
Mod_wsgi v4.4.8-1
Python v3.4.2
python-flask v0.10.1-5
Arch linux - 内核3.12.36
我正在使用mod_wsgi和flask来托管服务器.我能够使用以下简化代码和通用.wsgi脚本重现此问题:
MainServer.py:
import flask
app = flask.Flask(__name__)
@app.before_first_request
def initstuff():
test_file = '/tmp/test'
with open(test_file, 'w') as f:
f.write('test')
@app.route('/', methods=['GET'])
def rootdir():
return 'Hello world'
Run Code Online (Sandbox Code Playgroud)
MainServer.wsgi:
from MainServer import app as application
Run Code Online (Sandbox Code Playgroud)
预期:内容为'test'的文件写在/ tmp中
实际结果:没有写入文件.日志中未报告任何错误
如果我运行相同的代码,而是指向我的用户有权写入的任何其他目录,它会按预期创建该文件./ tmp是我遇到此问题的唯一目录.
如果我直接运行上面的代码并使用flask的内置服务器(app.run),它可以按预期在/ tmp中创建文件而不会出现任何问题.
我已经确保mod_wsgi服务器作为与app.run的脚本相同的用户运行,并且该用户能够写入/ tmp.
- 编辑 -
直接从命令行运行httpd不会导致此问题.将httpd作为systemd服务启动
小智 5
我认为与这个答案有关:https : //unix.stackexchange.com/questions/167835/where-apaches-tmp-located
Apache 可能正在使用 private-tmp 这导致 /tmp 被重定向到 /var/tmp/systemd- private- -httpd.service- /