在 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
选项,您也应该考虑使用它。
我遵循了此处的教程: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
选项,您也应该考虑使用它。