【Python编程】服务器长期开启jupyter notebook远程连接服务

前言

我们常常希望服务器长期开启一个jupyter notebook远程服务,这样我们就可以随时连接jupyter notebook进行编程了。

conda的安装

conda的安装参考《【Python学习】Windows10开始你的Anaconda安装与Python环境管理》或者《【Python学习】纯终端命令开始你的Anaconda安装与Python环境管理》

jupyter notebook的安装

Jupyter Notebook 是用于创建和共享计算文档的原始 Web 应用程序。 它提供了简单、流线型、以文档为中心的体验。 我们在conda环境中安装jupyter notebook非常容易,只需要执行以下命令:

conda install -c conda-forge notebook

配置jupyter notebook的远程访问

初始化配置文件

要开启Jupyter notebook的远程访问,首先要生成配置文件:

jupyter notebook --generate-config

运行成功后弹出提示:

Writing default config to: /home/username/.jupyter/jupyter_notebook_config.py

该命令会创建配置文件~/.jupyter/jupyter_notebook_config.py

设置远程访问密码

接着需要设置远程访问的密码,通过以下命令:

jupyter notebook password

该命令会要求我们在终端输入密码(重复两次)。建议密码长度不低于8位,同时密码与账号密码需要区别设置。输入两次密码后,弹出提示:

[NotebookPasswordApp] Wrote hashed password to /home/username/.jupyter/jupyter_notebook_config.json

修改jupyter notebook配置

使用以下命令打开配置文件:

vim ~/.jupyter/jupyter_notebook_config.py

修改部分设置,可以直接复制下面三行设置,将其粘贴在~/.jupyter/jupyter_notebook_config.py的开始位置,如下:

c.NotebookApp.ip='*'
c.NotebookApp.open_browser=False
c.NotebookApp.port=8888
  • 第一行设置IP为服务器主机IP,使用*可以自动识别主机IP,对于有多台计算节点的服务器集群,这种设置更方便。
  • 第二行设置运行jupyter notebook命令时不在主机打开浏览器,对于服务器,这样的设置是合理的;
  • 第三行设置运行jupyter notebook命令时首选的端口,如果该端口被占用,则打开8889端口,如果8889端口被占用,则打开8890端口,依次类推,直到找到可用的端口。对于不少服务器集群,只会开放某个范围段的端口,例如6666-6699,则设置c.NotebookApp.port为范围段的起始端口,例如c.NotebookApp.port=6666

如下图所示,修改完毕后,保存配置文件并退出!

在这里插入图片描述

使用nohup运行jupyter notebook命令

nohup英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行
nohup命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out的文件到当前目录下,如果当前目录的 nohup.out文件不可写,输出重定向到 $HOME/nohup.out文件中。

其语法格式如下:

nohup Command [ Arg … ] [ & ]

参数说明:

  • Command:要执行的命令。
  • Arg:一些参数,可以指定输出文件。
  • &:让命令在后台执行,终端退出后命令仍旧执行。

因此,我们可以使用nohup命令来运行jupyter notebook,如下所示:

conda env list # 查看所有conda环境名称
conda activate [需要运行jupyter notebook的环境名]
cd ~ # 切换至home目录
nohup jupyter notebook &

当然,我们也可以指定端口,首先检测端口是否被占用,例如检测端口6666是否被占用:

netstat -lnp | grep 6666

返回No info could be read for "-p"或者(Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.),说明端口没有被占用。
然后,运行以下命令指定端口提供Jupyter notebook远程服务:

nohup jupyter notebook --port=6666 &

打开~/nohup.out文件,查看jupyter notebook运行状态,如下:

[I 00:49:01.823 NotebookApp] Serving notebooks from local directory: /home/username
[I 00:49:01.823 NotebookApp] The Jupyter Notebook is running at:
[I 00:49:01.823 NotebookApp] http://gpu-6:6666/
[I 00:49:01.823 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

假设你运行该命令的服务器IP为:123.123.123.123,则可以使用以下连接访问jupyter notebook:

http://123.123.123.123:6666/

如下图所示,输入之前使用jupyter notebook password设置的远程访问密码,即可连接到服务器上的jupyter notebook
在这里插入图片描述

jupyter notebook的简单使用

通过jupyter notebook打开一个终端

在jupyter notebook的右侧,有一个New选项,可以通过该选项选择Terminal,从而打开一个终端,在终端里面进行命令操作。
在这里插入图片描述

几个jupyter notebook使用技巧

  • 进一步地,我们可以在打开的终端使用byobu或者tmux命令,进入byobu界面/tmux界面,这就意味着,可以稳定运行命令,而不用担心本地电脑的网络连接是否稳定。

  • 同时jupyter notebook的Running菜单里面可以看到处于running状态的notebook文件或者终端,如下图所示。如果我们的某个notebook文件代码已经运行完毕,并且想关闭它,除了需要在浏览器界面关闭notebook文件或者terminal终端,还需要进入Running菜单点击关闭,才能真正关闭代码文件或者终端,释放内存或者显存!

在这里插入图片描述* 此外,我们也可以使用手机浏览器进行访问,如下图所示,这方便我们进入Running菜单的终端或者Notebook文件,查看某些代码的运行状态,非常方便!

在这里插入图片描述

posted @ 2022-06-04 18:05  华工陈艺荣  阅读(308)  评论(0编辑  收藏  举报