我在带有mod_wsgi的Apache服务器中启动了Flask的python rest API。 它打开一些与其他机器的ssh连接,以发送一些信息并在那里使用它,在我之前 改变了我的服务器(我让它在Werkzeug服务器上运行)它工作得很好。 但现在它似乎有效,但是当我向我的服务器发出get请求时,它会冻结并且什么都不做,没有日志,没有错误,什么都没有。
初始化的.py
from flask import Flask, jsonify,make_response,abort,g,request,url_for
from flask_httpauth import HTTPBasicAuth
from flask_sqlalchemy import SQLAlchemy
from flask_bson import accept_bson, bsonify
import base64
from controler import Controler
...
...
@app.route('/api/register', methods=['POST'])
def new_user():
try:
username = request.json.get('username')
password = request.json.get('password')
except:
abort(400)
user = users.new_user(username,password)
return (jsonify({'username': user.username,'uri':url_for('get_user', username=user.username, _external=True)}), 201)
...
...
Controler.py
class Controler():
ips = 2 #number of machines in the distributed service
def _init_(self):
self.con = []#ssh conn
self.data = []#conn metadata
self.__initConn()
def __initConn(self):
i = 0
config = SSHConfig()
config.parse(open('./config'))
for j in range(self.ips):
i += 1
o = config.lookup('server' + str(i))
params = dict (
ssh_address=o['ip'],
ssh_port=22,
ssh_host_key=None,
ssh_username=o['user'],
ssh_password=o['password'],
ssh_private_key=None,
remote_bind_address=('127.0.0.1', 5555),
)
a = open_tunnel(**params)
a.start()#starting tunnel. *************************
它会在最后一行停止,它应该启动ssh隧道。
一些信息: Apache 2.4版 Python版本2.7
在Ubuntu服务器上的Ubuntu VM和子节点上发布
答案 0 :(得分:0)
在Apache下,您的代码不会像您一样运行,而是以Apache用户身份运行。如果您依赖用户主帐户中的SSH配置/密钥,那么它就无法运行。
./config
的相对路径也不起作用,因为使用mod_wsgi运行应用程序的进程的当前工作目录不会是您的代码所在。尝试将配置文件的位置计算为绝对路径。