有一次处理数据的时候我发现本机的内存不太够用, 于是想要用服务器上的资源. 但是直接在服务器上编程又没有高级的IDE, vim这编辑器用来看看脚本还行, 真要拿来写python程序那可真是要命.
但是不慌, jupyter完美解决这一问题. 首先在服务器上运行jupyter, 然后在本地用ssh连接服务器转发端口. 然后就可以在本地的浏览器编程, 使用服务器的资源了.
- 在服务器端运行jupyter
jupyter notebook --no-browser --port=8889
稍微解释一下, --no-browser是指不打开浏览器, 由于服务器上没有浏览器, 因此我们要加上这个参数. --port=8889是指定端口, 当然不一定是8889, 也可以是其他的, 只要没有在使用就行, 如果不指定默认的是8888.
- 在本地连接服务器jupyter notebook 端口
ssh -N -f -L localhost:8889:localhost:8889 remote_user@remote_host
-N 的意思是 告诉ssh不执行任何远程的命令, 在端口转发中非常常见
-f 的意思是 转到后台运行, 这样这个terminal还可以继续使用
-L 的意思是 列出端口转发配置(远程端口8889到本地端口8889)。前面的是本地的, 后面的是远程服务器的.
最后将remote_user@remote_host 改成你的用户名和服务器ip地址.
- 在浏览器中显示
在浏览器地址栏输入
localhost:8889
这时候应该要你输入takon, 你看看服务器上jupyter notebook 的运行terminal, 把上面的takon复制过去, 这样应该就可以了.
还有一点, 把上面命令中的jupyter notebook 改成jupyter-lab. 功能会更加全面.
- 关闭连接
由于上面的命令中我们用了 -f 后台运行. 因此关掉terminal并不会断开ssh连接. 可以用ps找出pid再kill掉
ps -aux | grep localhost:8889
local_user 18417 0.0 0.0 41488 684 ? Ss 17:27 0:00 ssh -N -f -L localhost:8888:localhost:8889 remote_user@remote_host
local_user 18424 0.0 0.0 11572 932 pts/6 S+ 17:27 0:00 grep localhost:8889
sudo kill -15 18417
这样就可以断开ssh连接了.
- 关闭jupyter notebook
在服务上启动的terminal上, 按Crtl+C,然后按y就可以了.