Python 3.x 如何在没有连接到计算机上活动实例的情况下运行Python脚本

Python 3.x 如何在没有连接到计算机上活动实例的情况下运行Python脚本,python-3.x,google-cloud-platform,google-compute-engine,Python 3.x,Google Cloud Platform,Google Compute Engine,如果这是一个愚蠢的问题,我道歉;说到云计算,我完全是个新手。 我使用谷歌计算实例来运行支持GPU的python脚本。不幸的是,要运行脚本,我的计算机必须打开,连接我和实例的终端必须打开。 我想知道是否有任何方法可以完全远程地在googlecloud的实例上运行python脚本,只需通过SSH查看脚本何时完成 我曾考虑过使用IPython笔记本或类似的软件,但我正在运行的代码需要一个非常特定的Anaconda环境,并且是通过终端运行的 编辑1: 我认为需要控制台将我连接到实例的原因是,我试图通过每

如果这是一个愚蠢的问题,我道歉;说到云计算,我完全是个新手。 我使用谷歌计算实例来运行支持GPU的python脚本。不幸的是,要运行脚本,我的计算机必须打开,连接我和实例的终端必须打开。 我想知道是否有任何方法可以完全远程地在googlecloud的实例上运行python脚本,只需通过SSH查看脚本何时完成

我曾考虑过使用IPython笔记本或类似的软件,但我正在运行的代码需要一个非常特定的Anaconda环境,并且是通过终端运行的

编辑1:

我认为需要控制台将我连接到实例的原因是,我试图通过每分钟编写一个小脚本来生成文件来测试它。我的过程如下: 1.通过google cloud Instances页面创建一个SSH实例 2.使用以下代码创建新的python脚本:

导入时间
i=0
而1:
tmp_文件=打开(“tst”+str(i)+“.txt”,“w”)
tmp_file.write(str(i))
tmp_文件.close()
i+=1
时间。睡眠(60)
  • 然后我运行了这段代码,通过在另一个控制台上运行SSHing来确认它是有效的
  • 我关闭了控制台,其中运行着程序。此后,文件停止创建

  • 理想情况下,我希望能够运行这样一个脚本,关闭终端窗口,让脚本的执行与控制台是否打开或设备是否打开无关。我只希望能够在脚本完成后使用SSH连接并查看脚本的结果。

    不确定您为什么说必须将终端连接到您的
    计算实例。更多的细节会有所帮助。您是否通过终端手动SSHing到实例中并运行脚本?这就是你将来想做的吗

    如果定期运行脚本,可以将其设置为
    cron作业


    您可能还希望查看
    云功能
    以实现无服务器。

    您可以使用类似tmux的程序

    # ssh to the system
    ssh user@system-blah-blah
    
    # start a new tmux session
    tmux new -s my_remote_session
    
    # detach from session (keyboard shortcut, in sequence)
    <ctrl-b> d
    
    # attach to it back
    tmux a -t my_remote_session
    
    #ssh到系统
    sshuser@system-废话
    #启动新的tmux会话
    tmux new-s我的远程会话
    #从会话分离(键盘快捷键,按顺序)
    D
    #把它背上
    tmux a-t我的远程会话
    
    对于GCE和Python,我也是一个完全的新手,所以你是一个很好的伙伴!我在学习使用GCE时也遇到了类似的问题。我选择了使用启动脚本,但我不确定它是否适合您需要设置的环境。我的使用bash启动脚本,看起来像这样:

    #! /bin/bash
    
    sudo apt-get update
    sudo apt-get -yq install python-pip
    sudo pip install --upgrade google-cloud
    sudo pip install --upgrade google-cloud-storage
    sudo pip install --upgrade google-api-python-client
    sudo pip install --upgrade google-auth-httplib2
    
    echo "Making directories..."
    
    mkdir -p /home/<username>/rawdata
    mkdir -p /home/<username>/processeddata
    mkdir -p /home/<username>/input
    mkdir -p /home/<username>/code
    mkdir -p /home/<username>/and so on
    
    echo "Setting ownership..."
    
    sudo chown -R <username> /home/<username>
    
    echo "Directory creation complete..."
    
    gsutil cp gs://<bucket with code>/* /home/<username>/code/
    
    echo "Boot complete."
    
    nohup python /home/<username>/code/workermaster.py &
    
    #/bin/bash
    更新源
    sudoapt-get-yq安装python-pip
    sudopip安装——升级谷歌云
    sudopip安装——升级谷歌云存储
    sudopip安装——升级谷歌api python客户端
    sudopip安装--升级google-auth-httplib2
    echo“制作目录…”
    mkdir-p/home//rawdata
    mkdir-p/home//processeddata
    mkdir-p/home//input
    mkdir-p/home//code
    mkdir-p/home//等等
    回显“设置所有权…”
    sudo chown-右/家/
    echo“目录创建完成…”
    gsutil cp gs:///*/home//code/
    回显“启动完成”
    nohup python/home//code/workermaster.py&
    
    代码的要点(如果不是自解释的!)是实例安装了各种包来支持代码,但是默认情况下其中一些包可能在GCE实例上。然后,它设置所需的目录,从存储桶复制所有所需的代码,并设置所有权。我想关键的一行是包含启动python脚本的“hohangup”

    我的“workermaster”脚本从存储桶获取任务,并将输出放在实例的一个文件夹中。通过查看日志,我可以从控制台看到该实例正在做什么(因此无需SSH插入实例)。我的实例还将输出复制到输出存储桶。如果我SSH到实例中,我看不到脚本正在运行,我只能看到文件“神秘地”出现在输出文件夹中


    这里有很多专家,他们可能会发布一个更符合您需求的解决方案,但到目前为止,类似上面的内容对我很有用。祝你好运

    要让脚本运行并关闭终端窗口,可以使用,这将让脚本运行(在屏幕会话内),如果关闭终端,它将继续工作,然后,您可以再次打开终端并连接到屏幕会话以查看结果


    另一个选项是使用,它有助于在虚拟机内部运行命令,而无需连接到虚拟机,但您必须创建一个,以便能够连接到ansible。

    因此,我创建了一小段测试代码,以查看是否必须为实例保留控制台。请参阅文章中的编辑基于他们的,tmux似乎只适用于OpenBSD、FreeBSD、NetBSD、Linux、OS X和Solaris。你知道一些适用于Ubuntu系统的东西吗?这就是我设置的VM所使用的。Ubuntu是Linux发行版。只需尝试“sudo apt get install tmux”来安装它。这对我很有用!对于任何有相同问题的人,只需在python命令解决问题之前添加“nohup”。我现在可以运行python脚本,即使没有连接到VM,也可以通过ssh返回查看结果!