在 Ubuntu 服务器上,如何从 Flask 中的 python 脚本调用 "sudo reload myproject"

On an Ubuntu server, how do I call "sudo reload myproject" from a python script in Flask

我遵循了此处的教程:https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-gunicorn-and-nginx-on-ubuntu-14-04 并创建了一个托管在 Digital Ocean 上 Ubuntu 服务器上的 Flask 应用程序。要更新网站,我需要通过 ssh 连接到我的云服务器并从命令行调用 "sudo reload myproject"。我想自动执行此操作,并让 Flask 中的 python 代码在每次收到 post 请求时调用此命令。

我尝试使用 os.system('sudo reload myproject') 但这不起作用。我将如何使用 Flask 重新加载项目?

在 /etc/sudoers.d/myOverrides.tmp 中,我有以下行:

用户 ALL=NOPASSWD: ALL

我的烧瓶模块中的代码:

from flask import Flask, render_template, request
import os 

@application.route("/", methods=['GET', 'POST'])
    def hello():
    os.system('sudo reload halo')
    if (request.method == 'POST'):
        print 'post request'
        os.system('sudo reload halo')
        return "<h1>reloaded</h1>"  
    else:
        return "<h1>default</h1>"  

当我在命令行中输入 "sudo reload halo" 时,它重新加载时没有问题。我希望 Flask 应用程序执行相同的命令。

我觉得这不是个好主意。提供您的网络应用程序 sudo 访问权限并进行调用 public 可用尖叫责任。

这里有几个其他选项:

使用 ssh 命令使其自动化

您实际上可以 运行 通过 SSH 命令,而无需自己进行完全登录。您可以继续使用您当前正在使用的用户,但设置 passwordless login 以使用 public-私钥对。

然后调用ssh -i /path/to/keyfile username@server 'sudo reload halo'

使用 gunicorn 自动重新加载

gunicorn 有一个内置的 --reload 选项,您也应该考虑使用它。