Ctrl K
ComunidadGuías…

morsl.sh

Rama develop · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/bin/bash
# Server management script for Morsl

PORT=8321
PIDFILE="/tmp/morsl.pid"
LOGFILE="/tmp/morsl.log"

start() {
    if [ -f "$PIDFILE" ] && kill -0 $(cat "$PIDFILE") 2>/dev/null; then
        echo "Server is already running (PID: $(cat $PIDFILE))"
        return 1
    fi

    # Check if port is in use
    if lsof -i :$PORT >/dev/null 2>&1; then
        echo "Port $PORT is already in use"
        lsof -i :$PORT
        return 1
    fi

    echo "Starting server on port $PORT..."
    nohup uvicorn morsl.app.main:app --port $PORT --host 127.0.0.1 > "$LOGFILE" 2>&1 &
    echo $! > "$PIDFILE"
    sleep 2

    if kill -0 $(cat "$PIDFILE") 2>/dev/null; then
        echo "Server started (PID: $(cat $PIDFILE))"
        echo "Log file: $LOGFILE"
    else
        echo "Failed to start server. Check $LOGFILE for details"
        rm -f "$PIDFILE"
        return 1
    fi
}

stop() {
    if [ -f "$PIDFILE" ]; then
        PID=$(cat "$PIDFILE")
        if kill -0 $PID 2>/dev/null; then
            echo "Stopping server (PID: $PID)..."
            kill $PID
            sleep 2
            if kill -0 $PID 2>/dev/null; then
                echo "Force killing..."
                kill -9 $PID
            fi
            echo "Server stopped"
        else
            echo "Server not running (stale PID file)"
        fi
        rm -f "$PIDFILE"
    else
        echo "No PID file found"
    fi

    # Also kill any orphaned processes on the port
    if lsof -i :$PORT >/dev/null 2>&1; then
        echo "Killing processes on port $PORT..."
        fuser -k $PORT/tcp 2>/dev/null
    fi
}

restart() {
    echo "Restarting server..."
    stop
    sleep 1
    start
}

status() {
    if [ -f "$PIDFILE" ] && kill -0 $(cat "$PIDFILE") 2>/dev/null; then
        echo "Server is running (PID: $(cat $PIDFILE))"
        curl -s http://localhost:$PORT/api/status | python3 -m json.tool 2>/dev/null || echo "API not responding"
    else
        echo "Server is not running"
        if lsof -i :$PORT >/dev/null 2>&1; then
            echo "Warning: Port $PORT is in use by another process:"
            lsof -i :$PORT
        fi
    fi
}

logs() {
    if [ -f "$LOGFILE" ]; then
        tail -f "$LOGFILE"
    else
        echo "No log file found at $LOGFILE"
    fi
}

cache_clear() {
    echo "API cache is in-memory — restarting server to clear it..."
    restart
}

restart_clean() {
    cache_clear
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    restart-clean)
        restart_clean
        ;;
    status)
        status
        ;;
    logs)
        logs
        ;;
    cache-clear)
        cache_clear
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|restart-clean|status|logs|cache-clear}"
        echo ""
        echo "Commands:"
        echo "  start         - Start the uvicorn server"
        echo "  stop          - Stop the server"
        echo "  restart       - Restart the server"
        echo "  restart-clean - Clear cache and restart the server"
        echo "  status        - Check if server is running"
        echo "  logs          - Tail the server log file"
        echo "  cache-clear   - Restart server to clear in-memory API cache"
        exit 1
        ;;
esac