Jupyter notebook 如何在后台运行jupyter笔记本?不需要为它保留一个终端

Jupyter notebook 如何在后台运行jupyter笔记本?不需要为它保留一个终端,jupyter-notebook,Jupyter Notebook,我们经常运行jupyter notebook在浏览器中弹出一个页面来使用笔记本。但是,打开服务器的终端仍然存在。有没有一种方法可以在服务器在后台运行的情况下关闭该终端?您可以使用jupyter笔记本&将进程放到后台。您可以在之后关闭终端,进程仍将运行。您可以在屏幕或tmux会话中启动笔记本电脑。使检查错误消息等变得容易。Tmux是在后台运行Jupyter笔记本的一个很好的选择。 我正在谷歌云平台的VM实例上运行我的Jupyter笔记本,操作系统为Ubuntu 16.0。在哪里 我必须启动SSH终

我们经常运行
jupyter notebook
在浏览器中弹出一个页面来使用笔记本。但是,打开服务器的终端仍然存在。有没有一种方法可以在服务器在后台运行的情况下关闭该终端?

您可以使用
jupyter笔记本&
将进程放到后台。您可以在之后关闭终端,进程仍将运行。

您可以在
屏幕
tmux
会话中启动笔记本电脑。使检查错误消息等变得容易。

Tmux是在后台运行Jupyter笔记本的一个很好的选择。 我正在谷歌云平台的VM实例上运行我的Jupyter笔记本,操作系统为Ubuntu 16.0。在哪里

  • 我必须启动SSH终端
  • 然后运行命令:
    jupyter notebook--no browser--port=5000
    。它将在该VM实例的端口号5000上启动Jupyter笔记本
  • 然后我打开浏览器,键入我的实例的ip地址:端口号5000。它将在浏览器中打开我的笔记本
  • 到现在为止,一切都很好。但是,如果与我的SSH终端的连接被终止,那么Jupyter笔记本会立即停止,因此我必须在SSH终端重新启动后或从新的SSH终端重新运行它

    为了避免这种情况,
    tmux
    是一个很好的选择

    终端多路复用器(
    tmux
    ),用于在SSH终端关闭后保持SSH会话在后台运行:
  • 启动ssh终端
  • 键入
    tmux
    。它将在同一终端中打开一个窗口
  • 在这里发出启动Jupyter笔记本的命令。打开笔记本
  • 现在,如果SSH终端关闭/终止,它将继续在实例上运行您的笔记本

    如果连接终止,则:

  • 重新连接或打开新的ssh终端。要查看此Jupyter服务器(在后台保持运行),请键入:
    tmux-attach
    命令
  • (编辑:将“笔记本”更改为“Jupyter服务器”)

    要终止tmux会话:

  • 合上笔记本。然后在tmux终端窗口中键入退出。 (更新:如果我们关闭笔记本并使用
    tmux detach
    命令:它将退出tmux会话窗口/终端,而不终止/停止tmux会话)

  • 有关更多详细信息,请参阅本文:

    在*nix下,运行程序避免因关闭终端而终止的最佳方法是使用nohup(无挂断)

    要在运行服务器后启动浏览器,请使用以下命令:

    nohup jupyter notebook &
    
    要在不打开浏览器的情况下启动服务器,请使用以下命令:

    nohup jupyter notebook --no-browser &
    
    请注意,您可以使用
    jupyter
    页面右上角的Quit关闭
    jupyter
    服务器

    nohup
    put作为进程init(0)的父进程,因此当终端关闭时,它不会收到“挂断”信号。所有输出(标准输出和标准错误)都被重定向到文件
    nohup.out

    nohup
    以程序和shell命令的形式存在,因此如果您有
    bash
    ,请查看
    bash
    man
    页面以了解更多详细信息。

    在后台运行jupyter笔记本服务器时,这对我很有用

    $>nohup jupyter笔记本--允许root>error.log&

    停止使用nohup jupyter笔记本很简单

    首先,找到jupyter的pid:

    $>ps-ef | grep jupyter

    e、 g输出如下:

    root 1141728972 16:00pts/0 00:04:29/path/to/jupyter笔记本

    然后终止进程:

    $>kill-9111417

    您还可以通过使用以下内容存储pid来简化此过程:

    $>nohup jupyter笔记本--允许root>error.log&echo$!>pid.txt

    i、 e,您可以通过以下方式停止笔记本:

    $>kill-9$(cat pid.txt)



    停止jupyter笔记本的另一种方法是从笔记本页面退出。

    您可以使用
    屏幕运行它

    screen -A -m -d -S anyscreenname jupyter notebook --no-browser
    

    这将在屏幕中启动jupyter,您可以使用屏幕命令访问屏幕

    实际上,
    jupyter笔记本&
    单靠它是不够的,后端仍然会登录到你的屏幕上
    你需要的是,从这里引用


    对于远程机器
    jupyter笔记本&
    工作正常。 但是,当您关闭终端时,它在本地计算机上不起作用。
    对于本地计算机,请使用
    tmux

    不是很复杂,但它完成了任务:

    #! /bin/bash
    
    #probably should change this to a case switch
    
    if [ "$1" == "end" ]
        then
            echo
            echo "Shutting Down jupyter-notebook"
            killall jupyter-notebook
            echo
          exit 0
     fi
    
    if [ "$1" == "-h" ]
       then
            echo   
            echo "To start  : jnote <port> [default 8888]" 
            echo "To end    : jnote end"
            echo "This help : jnote -h"
            echo
          exit 0
     fi
    
    #cast from string
    PORT=$(($1))
    
    RETURN=0
    PID=0
    
    if [ "$PORT" == "0" ] || [ "$PORT" == "" ]; then PORT=8888; fi
    
    echo
    echo "Starting jupyter-notebook"
    
    #background and headless, set port, allow colab access, capture log, don't open browser yet
    
    nohup jupyter notebook \
     --NotebookApp.allow_origin='https://colab.research.google.com' \
     --port=$PORT --NotebookApp.port_retries=0 \
     --no-browser >~/jnote.log 2>&1 &
    
    RETURN=$?
    PID=$!
    
    #Wait for bg process to complete - add as needed
    sleep 2
    
    if [ $RETURN == 0 ]
       then
            echo
            echo "Jupyter started on port $PORT and pid $PID"
            echo "Goto `cat ~/jnote.log | grep localhost: | grep -v NotebookApp`"
            echo
          exit 0
       else
            echo 
            echo "Jupyter failed to start on port $PORT and pid $PID with return code $RETURN"
            echo "see ~/jnote.log"
            echo
          exit $RETURN
     fi
    
    #/bin/bash
    #可能应该将此更改为案例开关
    如果[“$1”==“结束”]
    然后
    回声
    echo“关闭jupyter笔记本”
    killall jupyter笔记本
    回声
    出口0
    fi
    如果[“$1”=”-h”]
    然后
    回音
    echo“要启动:jnote[默认值8888]”
    回显“结束:jnote结束”
    echo“此帮助:jnote-h”
    回声
    出口0
    fi
    #用线浇铸
    端口=$($1))
    返回=0
    PID=0
    如果[“$PORT”==“0”]| |[“$PORT”==“0”];然后端口=8888;fi
    回声
    echo“启动jupyter笔记本”
    #后台和无头,设置端口,允许colab访问,捕获日志,不打开浏览器
    nohup jupyter笔记本\
    --NotebookApp.allow_origin='1!'https://colab.research.google.com' \
    --port=$port--NotebookApp.port\u重试次数=0\
    --没有浏览器>~/jnote.log 2>&1&
    返回=$?
    PID=$!
    #等待bg进程完成-根据需要添加
    睡眠2
    如果[$RETURN==0]
    然后
    回声
    echo“Jupyter在端口$port和pid$pid上启动”
    echo“Goto`cat~/jnote.log | grep localhost:| grep-v NotebookApp”
    回声
    出口0
    其他的
    回音
    echo“Jupyter无法在端口$port和pid$pid上启动,返回代码为$return”
    echo“请参阅~/jnote.log”
    回声
    退出$RETURN
    fi
    
    使用
    jupyter笔记本&

    然后键入
    disown
    或<
    #! /bin/bash
    
    #probably should change this to a case switch
    
    if [ "$1" == "end" ]
        then
            echo
            echo "Shutting Down jupyter-notebook"
            killall jupyter-notebook
            echo
          exit 0
     fi
    
    if [ "$1" == "-h" ]
       then
            echo   
            echo "To start  : jnote <port> [default 8888]" 
            echo "To end    : jnote end"
            echo "This help : jnote -h"
            echo
          exit 0
     fi
    
    #cast from string
    PORT=$(($1))
    
    RETURN=0
    PID=0
    
    if [ "$PORT" == "0" ] || [ "$PORT" == "" ]; then PORT=8888; fi
    
    echo
    echo "Starting jupyter-notebook"
    
    #background and headless, set port, allow colab access, capture log, don't open browser yet
    
    nohup jupyter notebook \
     --NotebookApp.allow_origin='https://colab.research.google.com' \
     --port=$PORT --NotebookApp.port_retries=0 \
     --no-browser >~/jnote.log 2>&1 &
    
    RETURN=$?
    PID=$!
    
    #Wait for bg process to complete - add as needed
    sleep 2
    
    if [ $RETURN == 0 ]
       then
            echo
            echo "Jupyter started on port $PORT and pid $PID"
            echo "Goto `cat ~/jnote.log | grep localhost: | grep -v NotebookApp`"
            echo
          exit 0
       else
            echo 
            echo "Jupyter failed to start on port $PORT and pid $PID with return code $RETURN"
            echo "see ~/jnote.log"
            echo
          exit $RETURN
     fi
    
    jupyter notebook & >> disown  
    
    jupyter notebook </dev/null &>/dev/null &
    
    alias jnote='jupyter notebook </dev/null &>/dev/null &'