#!/bin/bash # Function to check if a NATS node is up wait_for_nats() { local port=$1 while ! nc -z localhost "$port" > /dev/null 2>&1; do echo "Waiting for NATS node on port $port to start..." sleep 1 done echo "NATS node on port $port is available." } # Array to hold PIDs of NATS server processes declare -a nats_pids # Function to start NATS cluster nodes start_nats_cluster() { local nodes=$1 local base_port=4222 local cluster_port_base=5222 local log_dir="./nats_logs" local cluster_nodes=() # Create log directory, clean previous rm -rf "$log_dir" mkdir -p "$log_dir" # Start NATS nodes for ((i=0; i "$log_file" 2>&1 & nats_pids[i]=$! cluster_nodes+=("localhost:$port") done # Wait for all nodes to become available for port in "${cluster_nodes[@]}"; do wait_for_nats "${port##*:}" done } # Function to shut down NATS cluster nodes shutdown_nats_cluster() { echo "Shutting down NATS cluster nodes..." for pid in "${nats_pids[@]}"; do kill "$pid" done } # Trap Ctrl+C (SIGINT) to call shutdown function trap shutdown_nats_cluster SIGINT # Check if the number of nodes is provided if [ -z "$1" ]; then echo "Usage: $0 " exit 1 fi # Start the NATS cluster start_nats_cluster "$1" # Wait until a keyboard interrupt (Ctrl+C) is detected echo "NATS cluster is running. Press Ctrl+C to stop." wait