不能只用&,因会随SSH断开被SIGHUP终止;nohup适合一次性任务但无法交互,tmux支持实时日志、中断重连和优雅退出。

直接用 nohup 或 tmux 启动最稳妥,别只靠 &;nohup 适合一次性任务,tmux 才真能随时看日志、中断重连、优雅退出。
为什么不能只加 & 就完事
单纯在命令末尾加 &(比如 jupyter notebook --no-browser &),看似后台了,但进程会绑定当前 shell 的 session。一旦 SSH 断开或终端关闭,内核会向该 session 发送 SIGHUP,Jupyter 很可能被强制终止——尤其在云服务器上,网络抖动几秒就丢进程。
-
&只是把进程放到后台,不解决挂起(hangup)问题 - 标准输出/错误默认仍连终端,断连后可能写入失败或阻塞
- 没有进程隔离,
jobs查不到,ps里 PID 难定位,关都难关
nohup 方案:简单但有局限
它真正屏蔽 SIGHUP,并把 stdout/stderr 重定向到 nohup.out(除非你显式指定)。
推荐写法:
jupyter notebook --ip=0.0.0.0 --port=8888 --no-browser --allow-root --notebook-dir=/path/to/notebooks > jupyter.log 2>&1 &
但注意:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
-
nohup命令本身要显式写出来才保险,别依赖 shell 自动补全(有些旧版 bash 不自动加) -
nohup.out默认权限是-rw-------,别人无法tail,建议重定向到自定义 log 文件并设宽松权限(如chmod 644 jupyter.log) - 启动后拿不到 token,必须提前配置密码或从 log 里
grep 'token=' jupyter.log手动提取 - 想停止?得用
ps aux | grep jupyter找 PID,再kill -15 $PID(别一上来就-9)
tmux 方案:推荐用于日常维护
它不是“后台运行”,而是创建一个持久终端会话,SSH 断开也不影响,重连后可直接 tmux attach 看实时输出、Ctrl+C 退出、甚至调试报错。
常用操作:
- 新建命名会话并运行:
tmux new -s jupyter→ 进入后执行jupyter notebook --no-browser --port=8888 - 分离会话:
Ctrl+b d(先按 Ctrl+b,松开后再按 d) - 查看会话:
tmux ls,输出类似jupyter: 1 windows (created ...) - 重新连接:
tmux attach -t jupyter - 彻底杀掉:
tmux kill-session -t jupyter
优势在于:token 实时可见、日志不用翻文件、出错可交互处理、多个服务(如 Jupyter + TensorBoard)可分窗管理。
容易被忽略的关键点
无论用哪种方式,以下三件事不做,远程访问大概率失败:
- 防火墙没开对应端口(如
sudo ufw allow 8888或sudo firewall-cmd --add-port=8888/tcp --permanent) -
c.NotebookApp.ip在配置文件里写成了'127.0.0.1'或空字符串(应为'0.0.0.0'或具体服务器 IP) - 没生成密码或 token 留空,又没配
c.NotebookApp.token = ''和c.NotebookApp.password = '',导致浏览器打开后一直 403
临时测试可以加 --allow-root,但生产环境务必用非 root 用户启动,并通过 jupyter notebook password 设置登录凭证。

















