以 root 身份为所有用户启动进程(jupyter 笔记本服务器的情况)

以 root 身份为所有用户启动进程(jupyter 笔记本服务器的情况)

jupyter notebook这可能是一个特殊的情况,我们需要为同一台计算机上的所有系统用户启动。所有用户都有自己的 conda envs(安装在他们的家中),其名称相同base。但是,为了简单起见,我们希望在重新启动后为所有用户使用脚本启动 jupyter Notebook。

目前的案例适用于 2-3 个用户。

要求用户从 bash 会话中执行

tmux 
conda activate base
jupyter notebook --ip a.b.c.d -- port pqrs

接下来Ctrl+bd关闭 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 身份验证并非易事。

谢谢。

相关内容