Files
nanocode/audiobook-player/start.sh
T
Ubuntu 32b43f85bd a
2026-07-03 16:58:28 +08:00

183 lines
4.6 KiB
Bash
Executable File

#!/bin/bash
# Audiobook Player - Start Script
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PID_FILE="$SCRIPT_DIR/app.pid"
PORT=5000
show_help() {
echo "📚 Audiobook Player"
echo ""
echo "Usage:"
echo " ./start.sh start # Start server (foreground)"
echo " ./start.sh start-bg # Start server (background)"
echo " ./start.sh stop # Stop server"
echo " ./start.sh status # Check status"
echo " ./start.sh restart # Restart server"
echo ""
echo "URLs:"
echo " Local: http://localhost:$PORT"
echo " Public: http://$(curl -s ifconfig.me 2>/dev/null || echo 'YOUR_IP'):$PORT"
}
check_requirements() {
python3 -c "import flask, edge_tts" 2>/dev/null
if [ $? -ne 0 ]; then
echo "Installing requirements..."
pip3 install -r "$SCRIPT_DIR/requirements.txt"
fi
}
start_server() {
check_requirements
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null 2>&1; then
echo "⚠️ Server already running (PID: $PID)"
echo " Visit: http://localhost:$PORT"
return
fi
fi
echo "🚀 Starting Audiobook Player..."
echo " Port: $PORT"
echo ""
cd "$SCRIPT_DIR"
python3 app.py &
# Save PID
echo $! > "$PID_FILE"
sleep 2
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null 2>&1; then
echo "✅ Server started (PID: $PID)"
echo ""
echo "📱 Access URLs:"
echo " Local: http://localhost:$PORT"
PUBLIC_IP=$(curl -s ifconfig.me 2>/dev/null)
if [ -n "$PUBLIC_IP" ]; then
echo " Public: http://$PUBLIC_IP:$PORT"
fi
fi
fi
}
start_bg() {
check_requirements
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null 2>&1; then
echo "⚠️ Server already running (PID: $PID)"
return
fi
fi
echo "🚀 Starting Audiobook Player in background..."
cd "$SCRIPT_DIR"
nohup python3 app.py > "$SCRIPT_DIR/server.log" 2>&1 &
echo $! > "$PID_FILE"
sleep 2
PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null 2>&1; then
echo "✅ Server started (PID: $PID)"
echo ""
echo "📱 Access URLs:"
PUBLIC_IP=$(curl -s ifconfig.me 2>/dev/null)
if [ -n "$PUBLIC_IP" ]; then
echo " http://$PUBLIC_IP:$PORT"
fi
echo " http://localhost:$PORT"
echo ""
echo "Logs: tail -f $SCRIPT_DIR/server.log"
fi
}
stop_server() {
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null 2>&1; then
echo "⏹️ Stopping server (PID: $PID)..."
kill "$PID"
rm -f "$PID_FILE"
echo "✅ Server stopped"
else
echo "⚠️ Server not running"
rm -f "$PID_FILE"
fi
else
# Try to find and kill by port
PID=$(lsof -ti:$PORT 2>/dev/null)
if [ -n "$PID" ]; then
echo "⏹️ Stopping server (PID: $PID)..."
kill "$PID" 2>/dev/null
echo "✅ Server stopped"
else
echo "⚠️ Server not running"
fi
fi
}
show_status() {
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null 2>&1; then
echo "✅ Server is running (PID: $PID)"
echo " Port: $PORT"
echo ""
echo "📱 Access URLs:"
echo " http://localhost:$PORT"
PUBLIC_IP=$(curl -s ifconfig.me 2>/dev/null)
if [ -n "$PUBLIC_IP" ]; then
echo " http://$PUBLIC_IP:$PORT"
fi
else
echo "⏹️ Server not running (stale PID file)"
rm -f "$PID_FILE"
fi
else
PID=$(lsof -ti:$PORT 2>/dev/null)
if [ -n "$PID" ]; then
echo "✅ Server is running (PID: $PID)"
else
echo "⏹️ Server not running"
fi
fi
}
case "${1:-help}" in
start)
start_server
;;
start-bg|bg)
start_bg
;;
stop)
stop_server
;;
status)
show_status
;;
restart)
stop_server
sleep 2
start_bg
;;
help|--help|-h)
show_help
;;
*)
echo "❌ Unknown command: $1"
show_help
exit 1
;;
esac