从远程服务器持续使用 Jupyter Notebook

Persistent use of Jupyter Notebook from remote server

我使用 ssh -L 连接到远程服务器,但如果我合上笔记本电脑盖或连接断开,jupyter notebook 就会断开连接。

重新连接到远程服务器后,"last" 会话丢失。

如何让它持久化? screen 可以帮忙吗?

在远程服务器上,你应该在 screen 会话中打开你的 jupyter,如果你失去与服务器的连接并恢复它,它将使它持久化。

  1. 在您的计算机上:ssh -L xxxx:localhost:yyyy server
  2. screen.
  3. jupyter notebook --no-browser --port=yyyy。 [在远程服务器上]
  4. 在您的浏览器中:localhost:xxxx

要手动断开并重新连接:

  1. 退出画面window:control + a然后d.
  2. 断开与服务器的连接:control + d
  3. 并重新连接 ssh -L xxxx:localhost:yyyy
  4. 您可以选择重新打开屏幕 window,但没有必要,使用 screen -r
  5. 返回您的笔记本或重新打开 localhost:xxxx

持久化 Jupyter 服务器会话的标准用法是使用 nohup&;在您的远程服务器中,IP 地址为 xx.xx.xx.xx:

nohup jupyter notebook --no-browser --ip xx.xx.xx.xx --port yyyy &

现在,即使您关闭笔记本电脑或断开连接,您始终可以通过将浏览器指向 xx.xx.xx.xx:yyyy

来重新连接

添加到@BiBi 的回答中...

我建议您查看 tmux. Especially, if you combine tmux with the Tmux Plugin Manager and install Tmux Resurrect 而不是 screen,即使在您的远程服务器重新启动后,您也可以返回到之前的 Tmux 会话。

tmux 的快捷方式与 screens 的快捷方式有些相同,只是 control + acontrol + b 代替了。当然,tmux 允许您配置自定义快捷方式。

BiBi 的回答是正确的。但是我遇到过我的 ssh 连接意外终止并且端口转发在尝试重新连接时不再起作用的情况。可能远程机器上有一些悬空进程,不确定。

无论如何,在这些情况下,我使用 socat 在远程计算机上的两个本地端口之间进行代理:

# jupyter notebook/lab running in screen on port yyyy, then your connection dies...
ssh -L xxxx:localhost:zzzz
socat tcp-listen:zzzz,reuseaddr,fork tcp:localhost:yyyy

这样你就可以避免在不同的端口上重启 jupyter