#!/bin/bash # Gitea Webhook Ambassador Python Start Script SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SERVICE_NAME="gitea-webhook-ambassador-python" LOG_FILE="$SCRIPT_DIR/logs/service.log" PID_FILE="$SCRIPT_DIR/service.pid" # Create logs directory mkdir -p "$SCRIPT_DIR/logs" # Activate virtual environment source "$SCRIPT_DIR/venv/bin/activate" # Function: Start service start_service() { echo "🚀 Starting $SERVICE_NAME..." if [ -f "$PID_FILE" ]; then PID=$(cat "$PID_FILE") if ps -p $PID > /dev/null 2>&1; then echo "❌ Service is already running (PID: $PID)" return 1 else echo "⚠️ Found stale PID file, cleaning up..." rm -f "$PID_FILE" fi fi # Start service in background nohup python -m uvicorn app.main_demo:app --host 0.0.0.0 --port 8000 > "$LOG_FILE" 2>&1 & PID=$! echo $PID > "$PID_FILE" # Wait for service to start sleep 3 if ps -p $PID > /dev/null 2>&1; then echo "✅ Service started successfully (PID: $PID)" echo "📝 Log file: $LOG_FILE" echo "🌐 Access: http://localhost:8000" echo "🔑 Demo keys: demo_admin_key, demo_user_key" else echo "❌ Service failed to start" rm -f "$PID_FILE" return 1 fi } # Function: Stop service stop_service() { echo "🛑 Stopping $SERVICE_NAME..." if [ -f "$PID_FILE" ]; then PID=$(cat "$PID_FILE") if ps -p $PID > /dev/null 2>&1; then kill $PID echo "✅ Service stopped (PID: $PID)" else echo "⚠️ Service not running" fi rm -f "$PID_FILE" else echo "⚠️ PID file does not exist" fi } # Function: Restart service restart_service() { echo "🔄 Restarting $SERVICE_NAME..." stop_service sleep 2 start_service } # Function: Show status status_service() { if [ -f "$PID_FILE" ]; then PID=$(cat "$PID_FILE") if ps -p $PID > /dev/null 2>&1; then echo "✅ $SERVICE_NAME is running (PID: $PID)" echo "📝 Log file: $LOG_FILE" echo "🌐 Access: http://localhost:8000" else echo "❌ $SERVICE_NAME is not running (PID file exists but process not found)" rm -f "$PID_FILE" fi else echo "❌ $SERVICE_NAME is not running" fi } # Function: Show logs show_logs() { if [ -f "$LOG_FILE" ]; then echo "📝 Showing latest logs (last 50 lines):" echo "----------------------------------------" tail -n 50 "$LOG_FILE" echo "----------------------------------------" echo "Full log file: $LOG_FILE" else echo "❌ Log file does not exist" fi } # Function: Follow logs follow_logs() { if [ -f "$LOG_FILE" ]; then echo "📝 Real-time logs (Ctrl+C to exit):" tail -f "$LOG_FILE" else echo "❌ Log file does not exist" fi } # Main logic case "$1" in start) start_service ;; stop) stop_service ;; restart) restart_service ;; status) status_service ;; logs) show_logs ;; follow) follow_logs ;; *) echo "Usage: $0 {start|stop|restart|status|logs|follow}" echo "" echo "Command description:" echo " start - Start service" echo " stop - Stop service" echo " restart - Restart service" echo " status - Show service status" echo " logs - Show latest logs" echo " follow - Show real-time logs" echo "" echo "Examples:" echo " $0 start # Start service" echo " $0 status # Show status" echo " $0 logs # Show logs" exit 1 ;; esac