|
#!/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 "$@" |
|
|