Ragflow源码:launch_backend_service.sh

流程图

并行执行
任务执行器0
启动任务执行器
任务执行器1
...
任务执行器N
RAGFlow服务器
启动RAGFlow服务器
开始脚本
加载环境变量
取消HTTP代理设置
设置Python路径和库
设置默认工作进程数
定义清理函数
等待进程结束
退出时清理

代码解释

#!/bin/bash# 如果任何命令返回非零状态(失败),立即退出脚本
set -e# 函数:从.env文件加载环境变量
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=""
# 设置Python模块搜索路径
export PYTHONPATH=$(pwd)# 设置动态链接库路径
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/
# 获取jemalloc库的路径
JEMALLOC_PATH=$(pkg-config --variable=libdir jemalloc)/libjemalloc.so# 设置Python解释器
PY=python3# 如果未设置WS变量或WS小于1,则设置默认工作进程数为1
if [[ -z "$WS" || $WS -lt 1 ]]; thenWS=1
fi# 每个任务执行器和服务器的最大重试次数
MAX_RETRIES=5# 控制终止的标志
STOP=false# 存储子进程PID的数组
PIDS=()# 设置NLTK数据目录路径
export NLTK_DATA="./nltk_data"# 清理函数:处理终止信号
cleanup() {echo "接收到终止信号。正在关闭..."STOP=true# 终止所有子进程for pid in "${PIDS[@]}"; doif kill -0 "$pid" 2>/dev/null; thenecho "正在终止进程 $pid"kill "$pid"fidoneexit 0
}# 捕获SIGINT和SIGTERM信号,调用cleanup函数
trap cleanup SIGINT SIGTERM# 函数:使用重试逻辑执行task_executor.py
task_exe(){local task_id=$1local retry_count=0while ! $STOP && [ $retry_count -lt $MAX_RETRIES ]; doecho "为任务 $task_id 启动task_executor.py (尝试 $((retry_count+1)))"# 使用jemalloc预加载执行Python脚本LD_PRELOAD=$JEMALLOC_PATH $PY rag/svr/task_executor.py "$task_id"EXIT_CODE=$?if [ $EXIT_CODE -eq 0 ]; thenecho "任务 $task_id 的task_executor.py成功退出。"breakelseecho "任务 $task_id 的task_executor.py失败,退出代码 $EXIT_CODE。正在重试..." >&2retry_count=$((retry_count + 1))sleep 2fidoneif [ $retry_count -ge $MAX_RETRIES ]; thenecho "任务 $task_id 的task_executor.py在 $MAX_RETRIES 次尝试后失败。正在退出..." >&2cleanupfi
}# 函数:使用重试逻辑执行ragflow_server.py
run_server(){local retry_count=0while ! $STOP && [ $retry_count -lt $MAX_RETRIES ]; doecho "启动ragflow_server.py (尝试 $((retry_count+1)))"$PY api/ragflow_server.pyEXIT_CODE=$?if [ $EXIT_CODE -eq 0 ]; thenecho "ragflow_server.py成功退出。"breakelseecho "ragflow_server.py失败,退出代码 $EXIT_CODE。正在重试..." >&2retry_count=$((retry_count + 1))sleep 2fidoneif [ $retry_count -ge $MAX_RETRIES ]; thenecho "ragflow_server.py在 $MAX_RETRIES 次尝试后失败。正在退出..." >&2cleanupfi
}# 启动任务执行器进程
for ((i=0;i<WS;i++))
dotask_exe "$i" &PIDS+=($!)
done# 启动主服务器进程
run_server &
PIDS+=($!)# 等待所有后台进程完成
wait

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/86112.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86112.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端的跨域问题

前端新手也能看懂的跨域问题详解 在前端开发中&#xff0c;我们经常会听到“跨域问题”。尤其是在本地调试前端和后台接口时&#xff0c;浏览器突然抛出一堆报错信息&#xff0c;比如&#xff1a; Access to XMLHttpRequest at [http://api.xxx.com/data](http://api.xxx.com…

TCP 连接在异常情况下的断开机制

文章目录 一、进程(客户端)被 kill 掉1、kill [-15]2、kill -9 二、进程(客户端) core 掉 一、进程(客户端)被 kill 掉 详细验证流程 1、kill [-15] 2、kill -9 二、进程(客户端) core 掉

【甲方安全建设】持续渗透测试(一)

持续渗透测试是一种现代安全方法&#xff0c;它对针对组织数字资产的网络攻击进行实时或近实时模拟&#xff0c;确保在漏洞出现时识别并解决漏洞… 文章目录 行业洞察持续渗透测试不是什么&#xff1f;1. 非单一自动化漏洞扫描2. 非传统人工渗透测试的替代品3. 非万能解决方案4…

LOCAL PATTERNS GENERALIZE BETTER FOR NOVEL ANOMALIES

标题&#xff1a;局部模式在新颖异常上的泛化能力更强 原文链接&#xff1a;https://openreview.net/forum?id4ua4wyAQLm 源码链接&#xff1a;https://github.com/AllenYLJiang/Local-Patterns-Generalize-Better/ 发表&#xff1a;ICLR-2025 摘要 视频异常检测&#xff08;…

ABP vNext + Azure Application Insights:APM 监控与性能诊断最佳实践

ABP vNext Azure Application Insights&#xff1a;APM 监控与性能诊断最佳实践 &#x1f680; &#x1f4da; 目录 ABP vNext Azure Application Insights&#xff1a;APM 监控与性能诊断最佳实践 &#x1f680;1️⃣ 集成目标与环境要求 2️⃣ 安装 SDK 与注入服务 3️⃣ 日…

OPENGLPG第九版学习 - 纹理与帧缓存 part1

文章目录 6.1 纹理综述6.2 基木纹理类型6.3 创建并初始化纹理代理纹理 6.4 指定纹理数据6.4.1 显式设置纹理数据将静态数据载入到纹理对象 6.4.2 从缓存(目标对象GL_PIXEL_UNPACK_BUFFER)中加载纹理6.4.3 从文件加载图像(DDS为例)读取一个图像文件并返回内存中的纹素数据将纹素…

谁来定义未来座舱?新一代车载显示「C位」之战开启

在汽车智能网联化转型过程中&#xff0c;车载显示屏幕作为人车交互的重要载体&#xff0c;已经站上了迅猛发展的新起点。 一方面&#xff0c;伴随着汽车智能化的加速渗透与发展&#xff0c;传统中控屏与仪表显示屏的单一显示模式已经难以匹配智能化交互需求&#xff0c;车载显…

基于JavaScript的MQTT实时通信应用开发指南

MQTT 协议入门与实践&#xff1a;使用 JavaScript 构建实时通信应用 1. 什么是 MQTT&#xff1f; MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的 发布/订阅&#xff08;Pub-Sub&#xff09; 消息协议&#xff0c;专为低带宽、高延迟或不稳…

React 19中如何向Vue那样自定义状态和方法暴露给父组件。

文章目录 前言一、什么是 useImperativeHandle&#xff1f;1.1 为什么需要 useImperativeHandle&#xff1f;1.2 基本语法 二、useImperativeHandle 的常见用法3.1 暴露自定义方法3.2子组件封装的弹窗关闭方法暴露给外部 注意点&#xff1a;总结 前言 在 React 的函数组件中&a…

Windows定时关机工具

自己设计了一款简单易用的windows定时关机工具&#xff0c;使用简单&#xff0c;使用只需两步&#xff1a; 1、输入设定的时间 2、点击开始计时 Ps: 1、文章顶部直接下载exe文件 2、文件设置不了免费下载&#xff0c;只能用云盘&#xff1a;定时关机工具.exe - 蓝奏云。 w…

枫清科技受邀参加2025数据智能大会

近日&#xff0c;由中国通信标准化协会主办&#xff0c;中国信通院、大数据技术标准推进委员会(CCSA TC601)承办的“2025数据智能大会”在北京隆重召开&#xff0c;本届大会以“Data X AI&#xff0c;数据燃动智能”为主题&#xff0c;聚焦央国企数智化转型、下一代数据治理、数…

黑马头条-数据管理平台

目录 项目介绍 功能 项目准备 技术 验证码 验证码登录 验证码登录-流程 关于token token的介绍 token的使用 个人信息设置 个人信息设置和axios请求拦截器 axios响应拦截器和身份验证失败 优化-axios响应结果 发布文章 发布文章-富文本编辑器 发布文章-频道列…

Pytorch3D 中涉及的知识点汇总

PyTorch3D 是 Facebook&#xff08;现 Meta&#xff09;AI 研究院&#xff08;FAIR&#xff09;推出的一个基于 PyTorch 的三维计算库&#xff0c;主要用于 3D 计算机视觉与图形学任务&#xff0c;如 3D 重建、渲染、点云处理、网格操作等。 下面是对 PyTorch3D 中重要涉及知识…

XML在线格式化工具

XML格式化 免费在线XML格式化与压缩工具&#xff0c;一键美化、校验、压缩和优化您的XML代码。支持自定义缩进、节点折叠&#xff0c;提升可读性&#xff0c;减小文件体积&#xff0c;加速数据传输。 https://toolshu.com/xml 本工具是一款专为处理XML&#xff08;可扩展标记…

【软件系统架构】系列四:嵌入式技术

目录 一、嵌入式系统组成 (1)嵌入式处理器 (2)支撑硬件 (3)嵌入式操作系统 (4)支撑软件 (5)应用软件 二、嵌入式系统特性 三、嵌入式系统分类与分层结构 1.分类 2.嵌入式软件的五层架构深入解析 (1)硬件层(Hardware Layer) (2)抽象层(Hardware Ab…

监管报送面试回答思路和示例

在银行监管报送岗位的面试中&#xff0c;回答问题时需要展现出你的专业知识、实际操作经验、问题解决能力以及对监管合规的重视。以下是对各类问题的回答思路和示例&#xff1a; 一、专业知识类问题 1. 请简述银行监管报送的主要类型和报送频率 回答思路&#xff1a;分类介绍…

音视频SDK架构演进的实践与思考

“不是每一行代码都值得骄傲&#xff0c;但每一次迭代&#xff0c;都是一次更接近极致的尝试。” 从最初的数千行代码、到如今跨平台、全功能、稳定可靠的直播技术基座&#xff0c;大牛直播SDK走过了整整十年。十年&#xff0c;既是时间的刻度&#xff0c;更是技术沉淀与产品信…

vue.config.js配置学习

1.部署应用包时的基本 URL (baseUrl或publicPath) baseUrl在vue-cli 3.3 时弃用了&#xff0c;自此之后使用publicPath 默认&#xff1a;/ module.exports {// baseUrl:"/",publicPath: ./, ) 2.打包时输出的文件位置&#xff1a;outputDir 默认: dist module.…

大模型——Prompt Design

Prompt Design 为什么未来最重要的写作,不是写给人看的,而是写给AI理解的? 01|一切从一次“客服神操作”开始 前几天前,我在看一场 YC Demo Day 分享的时候,听到一个很炸裂的细节: 有个叫 Parahelp 的 AI 客服创业项目,靠一段几百行的“提示词”,打败了市面上大多数…

web布局20

在当下&#xff0c;可用于 Web 布局的 CSS 特性有很多&#xff0c;而且这个集合越来越强大。自从 Flexbox 的兼容性越来越完善&#xff0c;它替代了浮动布局&#xff0c;成为主流的布局技术。只不过&#xff0c;近几年来&#xff0c;CSS Grid 快速得到主流浏览器的支持&#xf…