[英]Spawn Long Running Background Task In Python
我正在嘗試設置一個Flask應用程序,該應用程序在收到請求時將運行Shell腳本。 目的是在我推送到GitLab時重新部署另一個應用程序。 我已經連接了所有東西,但是由於某種原因,Flask應用程序產生的子進程在啟動后不久就終止了。 我一直在通過SSH登錄服務器以啟動Flask應用程序,只要我保持登錄狀態,一切就可以正常工作,但是一旦我殺死了該會話,它將停止工作。
燒瓶應用
from flask import Flask, request, abort, Response
import os
import subprocess
from waitress import serve
process:subprocess.Popen = None
app = Flask(__name__)
@app.route('/', methods = ['POST'])
def deploy():
req_secret = request.headers.get("X-Gitlab-Token")
if req_secret is not None:
if 'DEPLOY_SECRET' in os.environ:
if os.environ['DEPLOY_SECRET'] == req_secret:
global process
if process is not None:
process.terminate()
process = subprocess.Popen("./deploy.sh", stdout=subprocess.PIPE, shell=True)
return 'Success'
abort(401)
if __name__ == "__main__":
serve(app, port=5000)
deploy.sh
#!/bin/sh
killall server
cd ..
git pull origin master
diesel migration run
cargo run
運行
#!/bin/sh
DEPLOY_SECRET=$1 pipenv run python autodeploy.py
cargo run
應該永遠運行,並且只要我保持登錄SSH會話的時間就可以運行。 我通過運行./run &
啟動flask應用程序
也許您的女服務員服務器沒有運行腳本的特權。 嘗試將onwership的腳本更改為“ waitress_user”,例如:
chown your_waitress_user deploy.sh
我不確定用戶名,可能是“女服務員”。
原來的解決方案是在python腳本中使用nohup
from flask import Flask, request, abort, Response
import os
import subprocess
from waitress import serve
process:subprocess.Popen = None
app = Flask(__name__)
@app.route('/', methods = ['POST'])
def deploy():
req_secret = request.headers.get("X-Gitlab-Token")
if req_secret is not None:
if 'DEPLOY_SECRET' in os.environ:
if os.environ['DEPLOY_SECRET'] == req_secret:
global process
if process is not None:
process.terminate()
with open("autodeploy.log", "a+") as log_file:
process = subprocess.Popen(["nohup", "./deploy.sh"], stdout=log_file, stderr=log_file)
return 'Success'
abort(401)
if __name__ == "__main__":
serve(app, port=5000)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.