我创建了一个简单的Web应用程序,如this tutorial中所述,并使用Google的计算引擎将其托管在Linux VM上。
不幸的是,当我在烧瓶应用程序后关闭SSH连接时,外部IP地址和功能不会持续存在。
只要我的虚拟机启动并运行,如何让它保持正常运行?这是应用程序位于我的虚拟机中的问题(例如:www /文件夹vs / user /文件夹)?
答案 0 :(得分:2)
答案 1 :(得分:2)
这是因为您以用户身份运行。关闭ssh连接几分钟后,您的会话将关闭,进程将被终止。您可以使用启动脚本(https://cloud.google.com/compute/docs/startupscript#startupscriptrunninginstances)或以root身份启动cron作业来运行它。
答案 2 :(得分:2)
上面的答案都很棒并且都有效。对于下一个对VM / Google Compute / Cloud来说相对较新的人来说,这就是我使用screen
的方式。我认为这是最简单/最好的解决方案,只需学习/快速站起来。
进入虚拟机后,首先要创建一个屏幕。
screen -S <screen name>
在我的情况下,我使用了
screen -S one
现在您的终端很可能会在屏幕上清除,这是同一个虚拟机上的新进程窗口。这是我们可以运行烧瓶代码的地方。
现在实现你的烧瓶/网络服务器代码/无论如何。
export FLASK_APP=main.py
flask run
现在我可以点击弹出的网络服务器链接。现在你可以关闭这个终端/终止我的ssh连接,网络应用程序仍然有效。
下次我ssh in我可以简单地使用screen -ls
来显示我的可用屏幕列表。它还会显示屏幕的状态。
googleUserName@one:~$ screen -ls
There is a screen on:
761.one (02/01/2018 06:58:56 PM) (Detached)
现在我可以重新连接到它,我只需使用-r
指定屏幕即可重新连接。
screen -r <screen name>
就我而言
screen -r one
当我重新连接时,我的网络服务器仍在运行并显示我所有的输出和流量,我希望好像我从未关闭它。
现在,如果您想在屏幕和正常的ssh连接之间来回跳转,可以从中分离-d
。 (在这种情况下,您不必指定屏幕名称,在我的情况下,因为您当前在屏幕上,并且将从当前分离。
screen -d
一些结束语......
我不知道你是否可以在屏幕上创建一个屏幕。
我不知道这个解决方案有多可持续/如果推荐的话。但是屏幕适用于我的用例。
这是我在main.py烧瓶应用程序中运行的代码。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
你可以找到它here
我使用谷歌计算引擎,设置和网络服务器开始的教程是here。