流程圖
并行執行
任務執行器0
啟動任務執行器
任務執行器1
...
任務執行器N
RAGFlow服務器
啟動RAGFlow服務器
開始腳本
加載環境變量
取消HTTP代理設置
設置Python路徑和庫
設置默認工作進程數
定義清理函數
等待進程結束
退出時清理
代碼解釋
#!/bin/bash
set -e
load_env_file ( ) { local script_dir = "$(cd "$( dirname "${BASH_SOURCE [ 0] } " ) " && pwd ) "local env_file=" $script_dir /.env"# 檢查.env文件是否存在if [ -f " $env_file " ]; thenecho " 從以下位置加載環境變量: $env_file "# 設置所有變量為環境變量set -asource " $env_file " set +aelseecho " 警告: 未找到.env文件: $env_file "fi
}# 加載環境變量
load_env_file# 取消可能由Docker守護進程設置的HTTP代理
export http_proxy=" "; export https_proxy = "" ; export no_proxy = "" ; export HTTP_PROXY = "" ; export HTTPS_PROXY = "" ; export NO_PROXY = ""
export PYTHONPATH = $( pwd )
export LD_LIBRARY_PATH = /usr/lib/x86_64-linux-gnu/
JEMALLOC_PATH = $( pkg-config --variable = libdir jemalloc) /libjemalloc.so
PY = python3
if [ [ -z "$WS " || $WS -lt 1 ] ] ; then WS = 1
fi
MAX_RETRIES = 5
STOP = false
PIDS = ( )
export NLTK_DATA = "./nltk_data"
cleanup ( ) { echo "接收到終止信號。正在關閉..." STOP = truefor pid in "${PIDS[ @] } " ; do if kill -0 "$pid " 2 > /dev/null; then echo "正在終止進程 $pid " kill "$pid " fi done exit 0
}
trap cleanup SIGINT SIGTERM
task_exe ( ) { local task_id = $1 local retry_count = 0 while ! $STOP && [ $retry_count -lt $MAX_RETRIES ] ; do echo "為任務 $task_id 啟動task_executor.py (嘗試 $(( retry_count+ 1 )) )" LD_PRELOAD = $JEMALLOC_PATH $PY rag/svr/task_executor.py "$task_id " EXIT_CODE = $? if [ $EXIT_CODE -eq 0 ] ; then echo "任務 $task_id 的task_executor.py成功退出。" break else echo "任務 $task_id 的task_executor.py失敗,退出代碼 $EXIT_CODE 。正在重試..." > &2 retry_count = $(( retry_count + 1 )) sleep 2 fi done if [ $retry_count -ge $MAX_RETRIES ] ; then echo "任務 $task_id 的task_executor.py在 $MAX_RETRIES 次嘗試后失敗。正在退出..." > &2 cleanupfi
}
run_server ( ) { local retry_count = 0 while ! $STOP && [ $retry_count -lt $MAX_RETRIES ] ; do echo "啟動ragflow_server.py (嘗試 $(( retry_count+ 1 )) )" $PY api/ragflow_server.pyEXIT_CODE = $? if [ $EXIT_CODE -eq 0 ] ; then echo "ragflow_server.py成功退出。" break else echo "ragflow_server.py失敗,退出代碼 $EXIT_CODE 。正在重試..." > &2 retry_count = $(( retry_count + 1 )) sleep 2 fi done if [ $retry_count -ge $MAX_RETRIES ] ; then echo "ragflow_server.py在 $MAX_RETRIES 次嘗試后失敗。正在退出..." > &2 cleanupfi
}
for (( i= 0 ; i< WS; i++ ))
do task_exe "$i " & PIDS += ( $! )
done
run_server &
PIDS += ( $! )
wait