jupyter服務器創建賬戶加映射對外賬戶地址

文章目錄

      • 一、創建test1-test10用戶(跳過已存在的test3)
      • 二、檢查必要組件是否安裝
      • 解決方法:用緊湊格式避免換行解析錯誤
      • 核心修復說明:
      • 使用方法:

以下是根據需求生成的命令、檢查腳本及啟動腳本,按步驟執行即可:

一、創建test1-test10用戶(跳過已存在的test3)

# 循環創建用戶,若用戶已存在則跳過
for U in test1 test2 test3 test4 test5 test6 test7 test8 test9 test10; doif ! id "$U" &>/dev/null; then# 用戶不存在時創建,家目錄自動生成,默認shell為bashuseradd -m -s /bin/bash "$U"# 為新用戶設置密碼(可根據需要修改密碼)echo "$U:StrongPassword123" | chpasswdecho "用戶 $U 創建完成"elseecho "用戶 $U 已存在,跳過創建"fi
done

二、檢查必要組件是否安裝

創建檢查腳本 check_dependencies.sh,用于驗證 code-serverjupyterlabjupyter-server-proxy 是否安裝:

#!/bin/bash# 檢查code-server是否安裝
if command -v code-server &>/dev/null; thenecho "? code-server 已安裝,版本:$(code-server --version | head -n1)"
elseecho "? code-server 未安裝,請先執行安裝命令:curl -fsSL https://code-server.dev/install.sh | sh"
fi# 檢查jupyterlab是否安裝
if command -v jupyter &>/dev/null && jupyter lab --version &>/dev/null; thenecho "? JupyterLab 已安裝,版本:$(jupyter lab --version)"
elseecho "? JupyterLab 未安裝,請先執行安裝命令:pip install jupyterlab"
fi# 檢查jupyter-server-proxy是否安裝
if pip show jupyter-server-proxy &>/dev/null; thenecho "? jupyter-server-proxy 已安裝,版本:$(pip show jupyter-server-proxy | grep Version | awk '{print $2}')"
elseecho "? jupyter-server-proxy 未安裝,請先執行安裝命令:pip install jupyter-server-proxy"
fi# 檢查jupyter-server-proxy擴展是否啟用
if jupyter server extension list 2>/dev/null | grep -q "jupyter_server_proxy.*enabled"; thenecho "? jupyter-server-proxy 擴展已啟用"
elseecho "? jupyter-server-proxy 擴展未啟用,請執行:jupyter server extension enable --sys-prefix jupyter_server_proxy"
fi

執行檢查腳本:

chmod +x check_dependencies.sh
./check_dependencies.sh

根據輸出提示,安裝缺失的組件(若有)。

錯誤原因:su -c 命令中換行符和引號的組合導致命令被拆分成多行執行,使得 --bind-addr 被誤認為獨立命令(而非 code-server 的參數)。核心是命令格式的語法問題。

解決方法:用緊湊格式避免換行解析錯誤

code-server 的啟動命令合并為單行(或嚴格控制換行位置),確保所有參數都屬于 code-server 命令。以下是修復后的腳本(直接復制粘貼生成):

cat << 'EOF' > start_multi_user_ide_v2.sh
#!/bin/bash
set -euo pipefail# 配置參數
USERS=(test1 test2 test3 test4 test5 test6 test7 test8 test9 test10)
BASE_PORT=8890
JUPYTER_PORT=8910
JUPYTER_CONFIG_DIR="/opt/conda/etc/jupyter/jupyter_server_config.d"
CHECK_DELAY=2# 步驟1:配置Jupyter代理
echo "🔧 配置Jupyter代理允許的端口(${BASE_PORT}-$((BASE_PORT+9)))..."
mkdir -p "$JUPYTER_CONFIG_DIR"
cat > "$JUPYTER_CONFIG_DIR/proxy-allowed-ports.json" << 'EOF_INNER'
{"ServerProxy": {"allowed_ports": [8890,8891,8892,8893,8894,8895,8896,8897,8898,8899]}
}
EOF_INNER
echo "? Jupyter代理配置已更新"# 步驟2:啟動各用戶Code-Server(修復命令格式)
echo -e "\n🚀 開始啟動各用戶Code-Server..."
for idx in "${!USERS[@]}"; doUSER="${USERS[$idx]}"PORT=$((BASE_PORT + idx))HOME_DIR="/home/${USER}"DATA_DIR="${HOME_DIR}/.local/share/code-server"EXT_DIR="${HOME_DIR}/.local/share/code-server/extensions"LOG_FILE="${HOME_DIR}/code-server.log"CONFIG_FILE="${HOME_DIR}/.config/code-server/config.yaml"# 檢查家目錄if [ ! -d "$HOME_DIR" ]; thenecho "? 跳過用戶${USER}:家目錄不存在"continuefi# 備份舊配置if [ -f "$CONFIG_FILE" ]; thenecho "?? 備份用戶${USER}舊配置文件..."mv "$CONFIG_FILE" "${CONFIG_FILE}.bak"fi# 創建目錄并授權echo "📂 準備用戶${USER}目錄..."mkdir -p "${DATA_DIR}" "${EXT_DIR}"chown -R "${USER}:${USER}" "${HOME_DIR}/.local" || {echo "? 用戶${USER}目錄授權失敗"continue}# 停止舊進程if ss -ltnp | grep -q ":${PORT} "; thenecho "🔌 關閉端口${PORT}舊進程..."pkill -9 -f "code-server.*:${PORT}" || echo "?? 無舊進程"sleep $CHECK_DELAYfi# 核心修復:用單行緊湊格式傳遞命令,避免換行解析錯誤echo "?? 啟動用戶${USER}(端口${PORT})..."su - "$USER" -c "nohup code-server --auth none --bind-addr 127.0.0.1:${PORT} --user-data-dir '${DATA_DIR}' --extensions-dir '${EXT_DIR}' --config /dev/null '${HOME_DIR}' > '${LOG_FILE}' 2>&1 & sleep 1" || {echo "? 用戶${USER}啟動命令執行失敗,日志:${LOG_FILE}"continue}# 檢查啟動狀態sleep $CHECK_DELAYif ss -ltnp | grep -q "127.0.0.1:${PORT}"; thenecho "? 用戶${USER}啟動成功"elseecho "? 用戶${USER}啟動失敗!日志:"tail -n 5 "$LOG_FILE"fi
done# 步驟3:啟動JupyterLab
echo -e "\n🌐 啟動JupyterLab(端口${JUPYTER_PORT})..."
if ss -ltnp | grep -q ":${JUPYTER_PORT} "; thenecho "🔌 關閉Jupyter舊進程..."pkill -9 -f "jupyter-lab.*:${JUPYTER_PORT}"sleep $CHECK_DELAY
finohup jupyter lab \--ip=0.0.0.0 \--port="${JUPYTER_PORT}" \--allow-root \
> /var/log/jupyterlab.log 2>&1 &sleep $((CHECK_DELAY * 2))
if ss -ltnp | grep -q ":${JUPYTER_PORT} "; thenecho "? JupyterLab啟動成功"
elseecho "? JupyterLab啟動失敗,日志:"tail -n 5 /var/log/jupyterlab.log
fi# 匯總結果
echo -e "\n📊 啟動結果匯總:"
echo "Code-Server監聽情況:"
ss -ltnp | grep -E ":889[0-9] " || echo "?? 未發現監聽端口"echo -e "\n🌐 訪問地址:"
echo "JupyterLab:http://36.151.192.85:23589/lab?token=$(grep -oP 'token=\K[^&]+' /var/log/jupyterlab.log | head -n1)"
echo "test1 Code-Server:http://36.151.192.85:23589/proxy/8890/"
EOF

核心修復說明:

su -c 中的 code-server 命令改為單行緊湊格式,避免因換行導致的參數拆分:
原多行命令容易被shell解析為多個獨立命令,而單行格式確保 --auth none--bind-addr 等參數都屬于 code-server 命令,解決“--bind-addr: command not found”錯誤。

使用方法:

  1. 復制上面的命令粘貼到終端,自動生成腳本。
  2. 運行腳本:
    chmod +x start_multi_user_ide_v2.sh
    ./start_multi_user_ide_v2.sh
    

此時 code-server 會正確接收所有參數,免密啟動并監聽對應端口。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/92649.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/92649.shtml
英文地址,請注明出處:http://en.pswp.cn/web/92649.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DDR中的POD與ODT

一、POD&#xff08;Pseudo Open Drain&#xff09;技術1. 定義與工作原理POD&#xff08;偽開漏&#xff09; 是DDR4/LPDDR4引入的電壓標準與驅動架構&#xff0c;替代傳統的SSTL&#xff08;Stub Series Terminated Logic&#xff09;。其核心特征是將上拉電源從VDDQ改為VTT&…

企業架構之導論(1)

一、企業架構是什么 企業架構是對企業業務、數據、應用、技術四大核心領域及其相互關系的系統化描述與設計框架。它像一張“城市藍圖”,確保業務戰略能精準映射到IT落地: 本質:是連接業務戰略(做什么)與技術執行(怎么做)的結構化方法論。 核心組件: 業務架構:定義業…

實戰:在已有K8S集群如何新增和刪除Node節點

本篇文章將分享一下如何在已有集群添加新節點和刪除現有節點1 新增節點到K8S集群新增節點可以分為準備節點、配置節點和將其加入集群三步。1.1 準備新節點準備一個相同操作系統的主機作為新節點。參考以前部署的文章&#xff1a;實戰部署k8s 1.28版本集群&#xff0c;跟著操作到…

C++ 黑馬 內存分配模型

一, 內存分配模型內存總共有四個分區1 代碼區 主要用來存儲二進制代碼&#xff0c;由操作系統進行管理2 棧區 由編譯器自己進行釋放和分配&#xff0c;例如函數的傳遞的參數&#xff0c;局部變量&#xff0c;const修飾的局部常量等等....3 堆區 由程序員自己分配和釋放&am…

【華為倉頡編程語言】運行第一個倉頡程序

歡迎來到倉頡編程語言的第一個實戰課程。 上節課我們成功安裝了倉頡工具鏈&#xff0c;今天讓我們一起編寫并運行第一個倉頡程序。相信很多同學都還記得學習第一門編程語言時寫的"Hello World"程序&#xff0c;那種看到程序成功運行的激動心情。今天&#xff0c;我們…

利用DeepSeek改寫并增強測試Duckdb和sqlite的不同插入方法性能

在前文基礎上&#xff0c;好奇作為事務型數據庫的SQLite表現怎么樣&#xff0c;讓DeepSeek來幫忙。 提示詞 請仿照附件編寫用python插入sqlite數據的測試函數&#xff0c;如果sqlite3沒有對應方法就省略 import sqlite3 import pandas as pd import timemethods [字符串拼接, …

進程管理塊(PCB):操作系統進程管理的核心數據結構

進程管理塊&#xff08;PCB&#xff09;&#xff1a;操作系統進程管理的核心數據結構在現代操作系統中&#xff0c;進程管理塊&#xff08;Process Control Block, PCB&#xff09; 是內核用來描述、管理和控制進程生命周期的最核心、最關鍵的數據結構。它就像是一個進程的“身…

線程的sleep、wait、join、yield如何使用?

sleep:讓線程睡眠&#xff0c;期間會出讓cpu&#xff0c;在同步代碼塊中&#xff0c;不會釋放鎖 wait(必須先獲得對應的鎖才能調用):讓線程進 入等待狀態,釋放當前線程持有的鎖資源線程只有在notify 或者notifyAll方法調用后才會被喚醒,然后去爭奪鎖. join: 線程之間協同方式,使…

2025年服裝智能跟單系統TOP3推薦榜單

TOP1領軍者首選推薦&#xff1a;金蝶服裝系統【★★★★★】 在服裝智能跟單系統的領域&#xff0c;金蝶服裝系統憑借其強大的功能和卓越的性能脫穎而出&#xff0c;成為眾多企業的首選。盡管本文標題提及的是另一份榜單&#xff0c;但值得一提的是&#xff0c;金蝶系統若參與評…

基于FFmpeg的B站視頻下載處理

起因是這樣的一天&#xff0c;本人在B站客戶端緩存了一個視頻&#xff0c;用于學習參考等學術交流&#xff0c;但是視頻和音頻卻是分開且通過Win Hex查看發現文件頭含有9個“30”&#xff0c;想到一個個手動刪字節不如讓程序取代&#xff0c;便有了本文章這一篇文章發布之前&am…

【Vue Router】路由模式、懶加載、守衛、權限、緩存

前言 Vue Router 是 Vue 生態中處理頁面跳轉的核心工具&#xff0c;它解決了單頁應用中 URL 管理、組件切換、狀態維護等關鍵問題&#xff0c;同時提供了豐富的功能&#xff08;如動態路由、嵌套路由、路由守衛&#xff09;。除了經常用到的路由配置以外&#xff0c;我們還需了…

Linux epoll 實現詳解 (fs/eventpoll.c)

核心數據結構分析 1. struct eventpoll (epoll 實例核心結構) c struct eventpoll {struct mutex mtx; // 保護 epoll 結構的互斥鎖wait_queue_head_t wq; // epoll_wait() 使用的等待隊列wait_queue_head_t poll_wait; // 文件 poll() 使用的等待隊列struc…

【牛客刷題】小紅的項鏈(字節跳動面試題)

文章目錄 一、題目介紹 1.1 輸入描述 1.2 輸出描述 1.3 示例 二、算法設計思路 三、流程圖 四、題解實現 五、復雜度分析 六、關鍵算法知識點 一、題目介紹 原題鏈接:https://www.nowcoder.com/practice/3da065cab096478eb603bbfca5af8b02 小紅將 n n n個珠子排成一排,然后…

【Html網頁模板】HTML炫酷星空(一閃一閃亮晶晶)

文章目錄專欄導讀功能預覽快速開始核心實現拆解1. 背景與基礎布局2. 背景層靜態星空&#xff08;輕微閃爍&#xff09;3. 前景層“亮晶晶”的閃爍小星星4. 交互與動效5. 行星裝飾可配置項與個性化建議初始化順序&#xff08;入口&#xff09;源碼結語專欄導讀 &#x1f525;&am…

第一天-CAN Signal信號的Multiplexor多路復用在DBC中實現

&#x1f680; CAN總線的“變形金剛術”&#xff1a;Multiplexor多路復用信號深度揭秘在汽車電子江湖中&#xff0c;當數百個ECU爭相發送數據時&#xff0c;如何讓一條CAN報文像"變形金剛"一樣自由切換形態&#xff1f;Multiplexor&#xff08;多路復用&#xff09;技…

Code Exercising Day 10 of “Code Ideas Record“:StackQueue part02

文章目錄【150. Evaluate Reverse Polish Notation】【239. Sliding Window Maximum】【347. Top K Frequent Elements】【150. Evaluate Reverse Polish Notation】 Problem Link Approach: Use a stack. Push numbers onto the stack; when encountering an operator, pop t…

系統架構設計師備考之架構設計高級知識

1.系統架構設計基礎知識1.1.軟件架構概念軟件架構定義軟件架構&#xff08;Software Architecture&#xff09;或稱軟件體系結構&#xff0c;是指系統的一個或者多個結構&#xff0c;這些結構包括軟件的構件&#xff08;可能是程序模塊、類或者是中間件&#xff09;、構件的外部…

PWM波的頻譜分析及matlab 驗證[電路原理]

你知道嗎&#xff1f;pwm可以制作adc模塊哦&#xff01;這樣普通的gpio也能實現adc功能了。 我們嵌入式日常接觸的pwm波&#xff0c;你真的了解他嗎&#xff1f; 只有知道PWM的頻譜是怎么樣的&#xff0c;才能設計合適的濾波器&#xff0c;下面我們一起從底層數學原理來推導PWM…

相機、鏡頭參數詳解以及相關計算公式

一、工業相機參數 1、分辨率 相機每次采集圖像的像素點數&#xff0c;也是指這個相機總共有多少個感光晶片。在采集圖像時&#xff0c;相機的分辨率對檢測精度有很大的影響&#xff0c;在對同樣大的視場成像時&#xff0c;分辨率越高&#xff0c;對細節的展示越明顯。 相機像素…

通信中間件 Fast DDS(一) :編譯、安裝和測試

目錄 1.簡介 2.Windows編譯、安裝和測試 2.1.編譯環境準備 2.2.編譯安裝 2.2.1.安裝FastCDR 2.2.2.安裝Foonathan Memory 2.2.3.安裝FastDDS 2.3.驗證安裝 3.Linux編譯、安裝和測試 3.1.編譯環境準備 3.2.編譯安裝 3.2.1.安裝FastCDR 3.2.2.安裝Foonathan M…