对于一个项目,我有一个简单的python脚本,它提供了一个带有烧瓶的http接口。剧本本身就像一种魅力。
#!flask/bin/python
from flask import Flask,request, Response
import os.path
import json
import sys
import logging
import logging.handlers
from dbMongoManager import saveToMongo
from dbSQLManager import saveToMYSQL
from FailedRequest import FailedRequest
from JSONValidation import validateJSON
app = Flask(__name__)
#create logger
logger = logging.getLogger('werkzeug')
#defines logger file and max size
handler = logging.handlers.RotatingFileHandler('request.log',maxBytes=5000000)
#define logger format
formatter = logging.Formatter("%(asctime)s;%(levelname)s;%(message)s")
handler.setFormatter(formatter)
#add loggerhandler to applications
logger.addHandler(handler)
app.logger.addHandler(handler)
#invoked method on a POST request
@app.route('/',methods = ['POST'])
def add():
"""
This function is mapped to the POST request of the REST interface
"""
print ("incoming POST")
#check if a JSON object is declared in the header
if request.headers['Content-Type'] == 'application/json; charset=UTF-8' and request.data:
print ("passed contentType check")
data = json.dumps(request.json)
#check if recieved JSON object is valid according to the scheme
#if (validateJSON(data)):
saveToMongo(data)
return "JSON Message saved in MongoDB"
raise FailedRequest
#invoked method on a POST request
@app.route('/sql',methods = ['POST'])
def addSQL():
"""
This function is mapped to the POST request of the REST interface
"""
print ("incoming SQL POST")
#check if a JSON object is declared in the header
if request.headers['Content-Type'] == 'application/json; charset=UTF-8':
print ("passed contentType check")
data = request.json
#check if recieved JSON object is valid according to the scheme
if (validateJSON(json.dumps(data))):
saveToMYSQL(data)
return "JSON Message saved in SQLDB"
raise FailedRequest
if __name__ == "__main__":
print "Start App"
app.run(host="0.0.0.0",port=int("80"),debug=True)因为这只是一个简单的脚本,所以它不是很有用,因为它不是在系统启动或崩溃时启动的。接下来是在我的debian服务器上创建一个服务来监督这个脚本。对于debian来说,我对整个服务器非常陌生,所以我觉得.conf文件的处理方法有点混乱。作为简单的alternativ,我找到了守护进程工具。我安装了它,然后它就运行了。我在/etc/services中创建了一个子文件夹,并在其中放置了一个run.sh文件,内容如下:
#!/bin/sh
echo Running service
sudo python /home/admin/RestService.py svscan检测到它并在它旁边创建一个监控文件夹。虽然我没有成功启动restservice.py,但我只得到了一个监督,这意味着我猜一定有问题。
我是遗漏了什么,还是有什么可能是问题所在?
发布于 2015-04-08 15:14:09
为什么在run.sh中需要sudo?默认情况下,监督作为根工作。
尝试在run.sh中添加日志记录。将行改为:
python /home/admin/RestService.py 2>&1 | logger -t RestService然后检查/var/log/user.log以获得输出。
您还可能希望使用daemontools中的multilog:http://cr.yp.to/daemontools/multilog.html
https://stackoverflow.com/questions/29370854
复制相似问题