| #!/bin/bash |
| set -eo pipefail |
|
|
| |
| source /home/pn/.env |
|
|
| |
| handle_error() { |
| echo "错误发生在第 $1 行" |
| exit 1 |
| } |
| trap 'handle_error $LINENO' ERR |
|
|
| |
| timeout_handler() { |
| echo "操作超时" |
| exit 1 |
| } |
|
|
| |
| wait_for_service() { |
| local service=$1 |
| local host=$2 |
| local port=$3 |
| local timeout=${4:-$WAIT_TIMEOUT} |
| |
| echo "等待 $service 就绪..." |
| local end=$((SECONDS + timeout)) |
| |
| while [ $SECONDS -lt $end ]; do |
| if nc -z "$host" "$port" >/dev/null 2>&1; then |
| echo "$service 已就绪" |
| return 0 |
| fi |
| echo "尝试连接 $service at $host:$port..." |
| sleep 1 |
| done |
| |
| echo "$service 启动超时" |
| exit 1 |
| } |
|
|
| |
| start_redis() { |
| echo "Starting Redis server..." |
| redis-server --daemonize yes |
| sleep 1 |
| if ! redis-cli ping > /dev/null 2>&1; then |
| echo "Failed to start Redis server" |
| exit 1 |
| fi |
| |
| |
| redis-cli config set maxmemory 512mb |
| redis-cli config set maxmemory-policy allkeys-lru |
| |
| echo "Redis server started successfully" |
| } |
|
|
| |
| start_qdrant() { |
| echo "Starting Qdrant server..." |
| |
| |
| mkdir -p /home/pn/.n8n/qdrant/storage |
| mkdir -p /home/pn/.n8n/qdrant/config |
| |
| |
| cat > /home/pn/.n8n/qdrant/config/config.yaml <<EOF |
| service: |
| host: 0.0.0.0 |
| port: 6333 |
| grpc_port: 6334 |
| |
| storage: |
| storage_path: /home/pn/.n8n/qdrant/storage |
| |
| log_level: INFO |
| EOF |
|
|
| |
| qdrant --config /home/pn/.n8n/qdrant/config/config.yaml > /home/pn/.n8n/qdrant/qdrant.log 2>&1 & |
| |
| |
| local timeout=30 |
| local end=$((SECONDS + timeout)) |
| |
| while [ $SECONDS -lt $end ]; do |
| if curl -s http://localhost:6333/health >/dev/null; then |
| echo "Qdrant server started successfully" |
| |
| echo "Qdrant version:" |
| curl -s http://localhost:6333/version |
| return 0 |
| fi |
| echo "Waiting for Qdrant to start..." |
| sleep 1 |
| |
| |
| if grep -i "error" /home/pn/.n8n/qdrant/qdrant.log >/dev/null 2>&1; then |
| echo "Error found in Qdrant logs:" |
| tail -n 10 /home/pn/.n8n/qdrant/qdrant.log |
| fi |
| done |
| |
| echo "Failed to start Qdrant server" |
| echo "Last 10 lines of Qdrant log:" |
| tail -n 10 /home/pn/.n8n/qdrant/qdrant.log |
| exit 1 |
| } |
|
|
| |
| check_services() { |
| echo "检查服务状态..." |
| |
| |
| echo "Redis 状态:" |
| redis-cli info | grep 'used_memory\|connected_clients\|total_connections_received' |
| |
| |
| echo "Redis 队列状态:" |
| redis-cli keys "${N8N_QUEUE_BULL_REDIS_PREFIX}*" |
| |
| |
| echo "Qdrant 状态:" |
| if curl -s http://localhost:6333/metrics >/dev/null; then |
| echo "Qdrant 运行正常" |
| curl -s http://localhost:6333/metrics |
| |
| |
| echo "Qdrant 集合列表:" |
| curl -s http://localhost:6333/collections |
| else |
| echo "Qdrant 服务异常" |
| tail -n 10 /home/pn/.n8n/qdrant/qdrant.log |
| fi |
| } |
|
|
| |
| main() { |
| current_time=$(date +"%Y-%m-%d %H:%M:%S") |
| echo "Starting services at $current_time" |
| |
| |
| echo "Database Configuration:" |
| echo "Host: ${DB_POSTGRESDB_HOST}" |
| echo "Port: ${DB_POSTGRESDB_PORT}" |
| echo "User: ${DB_POSTGRESDB_USER}" |
| echo "Database: ${DB_POSTGRESDB_DATABASE}" |
| echo "Type: ${DB_TYPE}" |
| |
| |
| wait_for_service "PostgreSQL" "${DB_POSTGRESDB_HOST}" "${DB_POSTGRESDB_PORT}" |
| start_redis |
| start_qdrant |
| check_services |
| |
| |
| source /home/pn/n8n/config/n8n_env.sh |
| |
| echo "Starting n8n..." |
| exec n8n start |
| } |
|
|
| |
| main "$@" |
|
|