jupyterhub的原木在哪里?

问题描述

重要提示我通过访问雇主的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,如下所示:

  1. 使用以下内容创建文件 /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
  1. 重新加载 systemctl 守护进程,然后您可以照常启动/停止服务:
sudo systemctl daemon-reload
sudo service jupyterhub start

现在是奖励:您可以使用命令 sudo journalctl -u jupyter 查看 JupyterHub 日志

由于所有这些魔法都需要 sudo 权限,因此您希望与您雇主的 IT 部门/系统管理员交谈,以像这样设置 JupyterHub。您的用户必须是 systemd-journal 组的成员才能查看所有日志。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...