Для проекта у меня есть простой скрипт python, который предлагает интерфейс http с флягой. Сам скрипт работает как шарм.запустить скрипт python как службу с daemontools
#!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 немного запутан. В качестве простой альтернативы я нашел daemontools. Я установил его, и он работает. Я создал папку в/и т.д./услуг и поместил файл run.sh в нем со следующим содержанием:
#!/bin/sh
echo Running service
sudo python /home/admin/RestService.py
svscan обнаруживает это и создает папку контролировать рядом с ним. Хотя вместо запуска restservice.py успешно, я получаю только контроль, а это значит, что что-то не так, я думаю.
Я пропустил что-то или что может быть проблемой здесь?
Спасибо! Это помогло мне выяснить, почему мой скрипт рушился! Хороший совет –