| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | 
							- #!/bin/bash
 - 
 - # Exit immediately if a command exits with a non-zero status
 - set -e
 - 
 - # Unset HTTP proxies that might be set by Docker daemon
 - 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
 - 
 - # Set default number of workers if WS is not set or less than 1
 - if [[ -z "$WS" || $WS -lt 1 ]]; then
 -   WS=1
 - fi
 - 
 - # Maximum number of retries for each task executor and server
 - MAX_RETRIES=5
 - 
 - # Flag to control termination
 - STOP=false
 - 
 - # Array to keep track of child PIDs
 - PIDS=()
 - 
 - # Function to handle termination signals
 - cleanup() {
 -   echo "Termination signal received. Shutting down..."
 -   STOP=true
 -   # Terminate all child processes
 -   for pid in "${PIDS[@]}"; do
 -     if kill -0 "$pid" 2>/dev/null; then
 -       echo "Killing process $pid"
 -       kill "$pid"
 -     fi
 -   done
 -   exit 0
 - }
 - 
 - # Trap SIGINT and SIGTERM to invoke cleanup
 - trap cleanup SIGINT SIGTERM
 - 
 - # Function to execute task_executor with retry logic
 - task_exe(){
 -     local task_id=$1
 -     local retry_count=0
 -     while ! $STOP && [ $retry_count -lt $MAX_RETRIES ]; do
 -         echo "Starting task_executor.py for task $task_id (Attempt $((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_executor.py for task $task_id exited successfully."
 -             break
 -         else
 -             echo "task_executor.py for task $task_id failed with exit code $EXIT_CODE. Retrying..." >&2
 -             retry_count=$((retry_count + 1))
 -             sleep 2
 -         fi
 -     done
 - 
 -     if [ $retry_count -ge $MAX_RETRIES ]; then
 -         echo "task_executor.py for task $task_id failed after $MAX_RETRIES attempts. Exiting..." >&2
 -         cleanup
 -     fi
 - }
 - 
 - # Function to execute ragflow_server with retry logic
 - run_server(){
 -     local retry_count=0
 -     while ! $STOP && [ $retry_count -lt $MAX_RETRIES ]; do
 -         echo "Starting ragflow_server.py (Attempt $((retry_count+1)))"
 -         $PY api/ragflow_server.py
 -         EXIT_CODE=$?
 -         if [ $EXIT_CODE -eq 0 ]; then
 -             echo "ragflow_server.py exited successfully."
 -             break
 -         else
 -             echo "ragflow_server.py failed with exit code $EXIT_CODE. Retrying..." >&2
 -             retry_count=$((retry_count + 1))
 -             sleep 2
 -         fi
 -     done
 - 
 -     if [ $retry_count -ge $MAX_RETRIES ]; then
 -         echo "ragflow_server.py failed after $MAX_RETRIES attempts. Exiting..." >&2
 -         cleanup
 -     fi
 - }
 - 
 - # Start task executors
 - for ((i=0;i<WS;i++))
 - do
 -   task_exe "$i" &
 -   PIDS+=($!)
 - done
 - 
 - # Start the main server
 - run_server &
 - PIDS+=($!)
 - 
 - # Wait for all background processes to finish
 - wait
 
 
  |