问题描述
重要提示:我通过访问雇主的jupyterhub网站并登录来使用Jupyter笔记本。我从未在命令行上实际运行jupyterhub
命令。
我在前面提到这一点是因为我在jupyterhub上在线找到的很多信息都以为用户有时会在命令行上运行jupyterhub
命令,但是我从不这样做(根据公司SOP)。发布答案时请记住这一点。
在进行了数小时的故障排除和头部抓伤之后,我刚刚发现,在扩展 New 后发现的选择中,没有出现特定的conda虚拟环境/内核的原因。我的jupyterhub主页中的kbd>按钮是kernel.json文件中的 1个字符的错字。
就用户(我)而言,jupyterhub的启动过程顺利进行。
实际上,这是一个小的错字,导致该候选内核的整个处理过程都被静默中止了。
简单的警告会节省我很多小时的工作。
下一个最好的办法就是能够检查jupyterhub在这种情况下可能产生的任何日志消息。
jupyterhub
是否保留日志?
- 如何查看此日志?
- 是否有办法使此日志(如果存在)最大程度地冗长?
- 是否可以将日志消息也直接显示在Web界面上?
解决方法
TL;DR:JupyterHub 不保留日志。 日志消息打印到 stdout
/stderr
并且必须在文件中捕获,最好使用重定向.
隐藏在我看到的 jupyterhub_config.py
文件中:
## DEPRECATED: use output redirection instead,e.g.
#
# jupyterhub &>> /var/log/jupyterhub.log
# Default: ''
# c.JupyterHub.extra_log_file = ''
还要注意 2017 年的这个 GitHub issue comment,它说
如果你想记录到一个文件,输出重定向是一个更强大的 适用于 JupyterHub 以及所有其他程序的方法:
jupyterhub &>> /var/log/jupyterhub.log
这将捕获所有输出
来自 jupyterhub 及其子进程,包括代理和
单用户服务器。
或者,如果您使用 systemd/supervisor/etc。启动您的流程, 总是有一个 stdout/stderr 捕获选项,这是正确的方法 去。
看起来 Jupyter 只是将其消息打印到 stdout/stderr,管理员有责任将消息保存到日志文件中。
在修改 this other GitHub issue comment 之后,我可以在运行 systemd
的 Linux 系统(例如现代 Debian、Ubuntu)上启动 JupyterHub,如下所示:
- 使用以下内容创建文件
/lib/systemd/system/jupyterhub.service
:
[Unit]
Description=Jupyterhub
[Service]
User=root
ExecStart=/usr/local/bin/jupyterhub -f /etc/jupyterhub/jupyterhub_config.py
[Install]
WantedBy=multi-user.target
- 重新加载
systemctl
守护进程,然后您可以照常启动/停止服务:
sudo systemctl daemon-reload
sudo service jupyterhub start
现在是奖励:您可以使用命令 sudo journalctl -u jupyter
查看 JupyterHub 日志。
由于所有这些魔法都需要 sudo
权限,因此您希望与您雇主的 IT 部门/系统管理员交谈,以像这样设置 JupyterHub。您的用户必须是 systemd-journal
组的成员才能查看所有日志。