mirror of
https://github.com/Dispatcharr/Dispatcharr.git
synced 2026-01-23 02:35:14 +00:00
105 lines
3 KiB
Bash
Executable file
105 lines
3 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Run Django migrations and collect static files
|
|
python manage.py collectstatic --noinput
|
|
python manage.py migrate --noinput
|
|
|
|
# Function to clean up only running processes
|
|
cleanup() {
|
|
echo "🔥 Cleanup triggered! Stopping services..."
|
|
for pid in "${pids[@]}"; do
|
|
if [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null; then
|
|
echo "⛔ Stopping process (PID: $pid)..."
|
|
kill -TERM "$pid" 2>/dev/null
|
|
else
|
|
echo "✅ Process (PID: $pid) already stopped."
|
|
fi
|
|
done
|
|
wait
|
|
}
|
|
|
|
# Catch termination signals (CTRL+C, Docker Stop, etc.)
|
|
trap cleanup TERM INT
|
|
|
|
# Initialize an array to store PIDs
|
|
pids=()
|
|
|
|
GUNICORN_PORT=9191
|
|
|
|
# If running in development mode, install and start frontend
|
|
if [ "$DISPATCHARR_ENV" = "dev" ]; then
|
|
echo "🚀 Development Mode - Setting up Frontend..."
|
|
GUNICORN_PORT=5656
|
|
|
|
# Install Node.js
|
|
apt-get update && apt-get install -y nodejs
|
|
|
|
# Install frontend dependencies
|
|
cd /app/frontend && npm install
|
|
cd /app
|
|
|
|
# Start React development server
|
|
echo "🚀 Starting React Dev Server..."
|
|
cd /app/frontend
|
|
PORT=9191 ./node_modules/pm2/bin/pm2 --name test start npm -- start
|
|
./node_modules/pm2/bin/pm2 logs &
|
|
react_pid=$!
|
|
echo "✅ React started with PID $react_pid"
|
|
pids+=("$react_pid")
|
|
cd /app
|
|
fi
|
|
|
|
# If running in `dev` or `aio`, start Redis and Celery
|
|
if [ "$DISPATCHARR_ENV" = "dev" ] || [ "$DISPATCHARR_ENV" = "aio" ]; then
|
|
echo "🚀 Running Redis and Celery for '$DISPATCHARR_ENV'..."
|
|
|
|
# Start Redis
|
|
echo "🚀 Starting Redis..."
|
|
redis-server --daemonize no &
|
|
sleep 1 # Give Redis time to start
|
|
redis_pid=$(pgrep -x redis-server)
|
|
if [ -n "$redis_pid" ]; then
|
|
echo "✅ Redis started with PID $redis_pid"
|
|
pids+=("$redis_pid")
|
|
else
|
|
echo "❌ Redis failed to start!"
|
|
fi
|
|
|
|
# Start Celery
|
|
echo "🚀 Starting Celery..."
|
|
celery -A dispatcharr worker -l info &
|
|
celery_pid=$!
|
|
echo "✅ Celery started with PID $celery_pid"
|
|
pids+=("$celery_pid")
|
|
fi
|
|
|
|
# Always start Gunicorn
|
|
echo "🚀 Starting Gunicorn..."
|
|
gunicorn --workers=4 --worker-class=gevent --timeout=300 --bind 0.0.0.0:${GUNICORN_PORT} dispatcharr.wsgi:application &
|
|
gunicorn_pid=$!
|
|
echo "✅ Gunicorn started with PID $gunicorn_pid"
|
|
pids+=("$gunicorn_pid")
|
|
|
|
# Log PIDs
|
|
echo "📝 Process PIDs: ${pids[*]}"
|
|
|
|
# Wait for at least one process to exit and log the process that exited first
|
|
if [ ${#pids[@]} -gt 0 ]; then
|
|
echo "⏳ Waiting for processes to exit..."
|
|
ps -aux | grep -E 'redis-server|celery|gunicorn|npm'
|
|
wait -n "${pids[@]}"
|
|
echo "🚨 One of the processes exited! Checking which one..."
|
|
|
|
for pid in "${pids[@]}"; do
|
|
if ! kill -0 "$pid" 2>/dev/null; then
|
|
process_name=$(ps -p "$pid" -o comm=)
|
|
echo "❌ Process $process_name (PID: $pid) has exited!"
|
|
fi
|
|
done
|
|
else
|
|
echo "❌ No processes started. Exiting."
|
|
exit 1
|
|
fi
|
|
|
|
# Cleanup and stop remaining processes
|
|
cleanup
|