如何在后台运行木星笔记本电脑? 不需要保持一个终端吗

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

111731 次浏览

您可以使用 jupyter notebook --no-browser & disown将该进程放到后台。之后可以关闭终端,进程仍然在运行。

如果你正在使用 zsh,你也可以使用一个更短的版本,做同样的事情: jupyter notebook --no-browser &!

要终止进程,可以使用 pgrep jupyter查找进程的 PID,然后使用 kill 1234,用刚才找到的 PID 替换1234。

解释

--no-browser标志使得 jupyter 无法自动打开浏览器,它也可以在没有这个标志的情况下工作。

&将其放在当前运行的 shell 的后台。

然后,disown从当前正在运行的 shell 的背景中删除该作业,并使其独立于 shell 运行,以便您可以关闭它。

zsh版本中,&!是一个与 & disown相同的内置函数。

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

Tmux 是一个很好的选择,可以在后台运行您的 Jupiter 笔记本电脑。

我在一个谷歌云平台的 VM 实例上运行我的 Jupiter 笔记本,操作系统是 Ubuntu 16.0

  1. 我必须启动 SSH 终端
  2. 然后运行命令: jupyter-notebook --no-browser --port=5000。它将在 VM 实例的端口号5000上启动 Jupiter 笔记本
  3. 然后我打开浏览器,输入 ip _ addrees _ of _ my _ instance: port _ number 即5000,它会在浏览器中打开我的笔记本。

到现在为止,一切都很好。但是等待,如果连接到我的 SSH 终端终止,然后木星笔记本立即停止,因此我必须重新运行它一次,一旦 SSH 终端重新启动或从新的 SSH 终端。

为了避免这种 tmux是非常好的选择。

终端多路复用器(tmux)在 SSH 终端关闭后保持 SSH 会话在后台运行:

  1. 启动 ssh 终端
  2. 键入 tmux。它将在同一终端中打开一个窗口。
  3. 这里给命令启动朱庇特笔记本。打开笔记本。

现在,如果 SSH 终端关闭/终止,它将继续在实例上运行您的笔记本电脑。

如果连接终止,则:

  1. 重新连接或打开新的 ssh 终端。

(编辑: 更改“笔记本”为“木星服务器”)

希望终止 tmux 会话:

  1. 关闭笔记本。然后在多路终端窗口中键入 exit。 (update: 如果我们关闭笔记本并使用 tmux detach命令: 它将从 tmux 会话窗口/终端退出,而不终止/停止 tmux 会话)

更多细节请参考这篇文章: https://www.tecmint.com/keep-remote-ssh-sessions-running-after-disconnection/

在 * nix 下,运行程序以避免关闭终端而终止的最佳方法是使用 没有(不挂起)。

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

nohup jupyter notebook &

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

nohup jupyter notebook --no-browser &

请注意,您可以通过使用 jupyter页面右上角的戒断关闭 jupyter服务器。

nohup作为进程 init (0)的父进程,所以当终端关闭时它不会接收“挂起”信号。所有输出(标准输出和标准错误)都被重定向到文件 nohup.out nohup既作为程序命令也作为 shell 命令存在,因此如果您有 bash,请检查 bashman页以阅读更多细节。

当我在后台运行一个 Jupyter 笔记本服务器时,这对我很有用。

$> nohup jupyter notebook --allow-root > error.log &

停笔记本很简单。

首先,找到木星的 pid:

$> ps -ef| grep jupyter

例如:

root 11417 2897 2 16:00 pts/0 00:04:29 /path/to/jupyter-notebook

然后终止这个过程:

$> kill -9 11417

还可以通过以下方式存储 pid 来简化这一过程:

$> nohup jupyter notebook --allow-root > error.log & echo $!> pid.txt

也就是说,你可以用以下方法停止笔记本:

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


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

您可以使用 screen来运行它。

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

这将在屏幕上启动 Jupyter,您可以使用屏幕命令访问屏幕。

实际上,仅有 jupyter notebook &是不够的,后端仍然会记录到您的屏幕上。
你需要的是,从这个问题引用的 href = “ https://unix.stackexchange.com/questions/74520/can-i-redirect-output-to-a-log-file-and-behind-a-process-at-the-same-time”>

jupyter notebook > /path/to/somefileforlogging 2>&1 &

对于远程机器 jupyter notebook &工作正常。 但是,当您关闭终端时,它不能在本地机器上工作。 对于本地机器,使用 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
jupyter notebook & >> disown

通过使用 jupyter notebook &将进程放到后台
然后键入 disowndisown <the process id>
你现在可以关闭航站楼了

从控制终端分离木星进程,并发送其所有的输入和输出数据到 /dev/null,这是一个特殊的设备文件,注销任何数据写入它。

jupyter notebook </dev/null &>/dev/null &

像我这样的懒人更喜欢编辑 ~/.bash_aliases并创建一个别名:

alias jnote='jupyter notebook </dev/null &>/dev/null &'

参考资料: https://www.tecmint.com/run-linux-command-process-in-background-detach-process/

正如一个用户建议的那样,使用 jupyter notebook & 关于在关闭终端后杀死内核的注释,可能您正在使用 jupyter-notebook &.

如果您正在使用 iTerm2软件, 首先你需要设置:

brew shellenv

然后启动木星:

eval $(/usr/local/bin/brew shellenv)


nohup jupyter notebook &