首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用daemontools将python脚本作为服务运行

使用daemontools将python脚本作为服务运行
EN

Stack Overflow用户
提问于 2015-03-31 14:19:37
回答 1查看 1.4K关注 0票数 0

对于一个项目,我有一个简单的python脚本,它提供了一个带有烧瓶的http接口。剧本本身就像一种魅力。

代码语言:javascript
复制
#!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文件,内容如下:

代码语言:javascript
复制
#!/bin/sh
echo Running service
sudo python /home/admin/RestService.py 

svscan检测到它并在它旁边创建一个监控文件夹。虽然我没有成功启动restservice.py,但我只得到了一个监督,这意味着我猜一定有问题。

我是遗漏了什么,还是有什么可能是问题所在?

EN

回答 1

Stack Overflow用户

发布于 2015-04-08 15:14:09

为什么在run.sh中需要sudo?默认情况下,监督作为根工作。

尝试在run.sh中添加日志记录。将行改为:

代码语言:javascript
复制
python /home/admin/RestService.py 2>&1 | logger -t RestService

然后检查/var/log/user.log以获得输出。

您还可能希望使用daemontools中的multilog:http://cr.yp.to/daemontools/multilog.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29370854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档