jupyter notebook
这可能是一个特殊的情况,我们需要为同一台计算机上的所有系统用户启动。所有用户都有自己的 conda envs(安装在他们的家中),其名称相同base
。但是,为了简单起见,我们希望在重新启动后为所有用户使用脚本启动 jupyter Notebook。
目前的案例适用于 2-3 个用户。
要求用户从 bash 会话中执行
tmux
conda activate base
jupyter notebook --ip a.b.c.d -- port pqrs
接下来Ctrl+b
,d
关闭 tmux 会话。
新案例(用户数量较多)
运行脚本,root
为特定端口上的每个用户启动 jupyter 服务器。
为此,我们准备了一个 bash 脚本,用于在当前用户的空端口上启动笔记本。
#!/bin/bash
source ~/.bashrc
eval "$(conda shell.bash hook)"
conda activate base
current_env=$CONDA_DEFAULT_ENV
echo -e "\t ----------\n\t Current conda environment : " $current_env
################################################
# get an empty port number between a range
used=$(ss -tulpn | grep -e9{700..800} | awk '{print $5}' | grep -o -E '[^:]+$' | xargs)
#echo -e "\t\t Currently used ports : $used"
# function to generate random number within a range
rnd() {
out=$(shuf -i 9700-9800 -n 1)
echo $out
}
val=$(rnd)
# this loop breaks when val is not found in string
while grep -q "$val" <<<"$string"; do
#echo "port being used"
val=$(rnd)
done
#echo "$val"
port=$val
################################################
jupyter notebook --ip a.b.c.d --port "$port" # start on specific port
################################################
status=$(ss -tulpn | grep "jupyter" | grep "$port")
echo -e "\t\t $status \n\n"
权限:用户可以读取其他用户的文件。不允许在其他用户主目录中执行(即使是 root)。
问题 :如何以 root 用户身份自动执行此操作,以便在系统重新启动时启动所有服务器(针对用户)。
- 一种方法可能是
nohup
与命令一起使用而不是使用tmux
,并在循环中迭代所有用户。有任何想法吗。
不使用其他方法,jupyterhub
因为它需要 Ubuntu,并且配置 PAM 身份验证并非易事。
谢谢。