Files
turmlibar-calendar/start_minimal.sh
2025-10-30 13:33:08 +01:00

108 lines
3.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Minimal startup script for Turmli Calendar on Raspberry Pi Zero
# Uses minimal resources and avoids problematic dependencies
set -e
# Configuration
APP_DIR="/opt/turmli-calendar"
APP_USER="pi"
APP_PORT="8000"
VENV_PATH="$APP_DIR/venv"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
print_info() {
echo -e "${BLUE}${NC} $1"
}
print_success() {
echo -e "${GREEN}${NC} $1"
}
print_error() {
echo -e "${RED}${NC} $1"
}
print_warning() {
echo -e "${YELLOW}${NC} $1"
}
# Check if running as correct user
if [ "$EUID" -eq 0 ]; then
print_error "Don't run this script as root. Use: ./start_minimal.sh"
exit 1
fi
# Check if application directory exists
if [ ! -d "$APP_DIR" ]; then
print_error "Application directory not found: $APP_DIR"
print_info "Please run the deployment script first: sudo ./deploy_rpi.sh install"
exit 1
fi
# Check if virtual environment exists
if [ ! -d "$VENV_PATH" ]; then
print_error "Virtual environment not found: $VENV_PATH"
print_info "Please run the deployment script first: sudo ./deploy_rpi.sh install"
exit 1
fi
# Change to application directory
cd "$APP_DIR"
# Show system resources before starting
print_info "System resources before startup:"
echo " Memory: $(free -m | grep Mem | awk '{printf "Used: %dMB / Total: %dMB (%.1f%%)", $3, $2, $3*100/$2}')"
echo " Swap: $(free -m | grep Swap | awk '{printf "Used: %dMB / Total: %dMB", $3, $2}')"
echo " CPU Load: $(uptime | awk -F'load average:' '{print $2}')"
echo " Disk: $(df -h / | tail -1 | awk '{printf "Used: %s / Total: %s (%s)", $3, $2, $5}')"
echo
# Set environment variables for minimal resource usage
export PYTHONUNBUFFERED=1
export PYTHONDONTWRITEBYTECODE=1
export MALLOC_ARENA_MAX=2 # Limit memory fragmentation
export MALLOC_MMAP_THRESHOLD_=131072
export MALLOC_TRIM_THRESHOLD_=131072
export MALLOC_MMAP_MAX_=65536
# Set a custom temp directory to avoid filling /tmp
export TMPDIR="$APP_DIR/tmp"
mkdir -p "$TMPDIR"
# Clear Python cache to free memory
find "$APP_DIR" -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
find "$APP_DIR" -name "*.pyc" -delete 2>/dev/null || true
print_info "Starting Turmli Calendar with minimal resources..."
print_info "Access the application at: http://$(hostname -I | cut -d' ' -f1):${APP_PORT}"
print_info "Press Ctrl+C to stop"
echo
# Start uvicorn with minimal configuration
# --workers 1: Single worker process
# --loop asyncio: Standard event loop (no uvloop)
# --no-access-log: Disable access logging to save resources
# --log-level warning: Only log warnings and errors
# --limit-concurrency 10: Limit concurrent connections
# --timeout-keep-alive 5: Short keepalive timeout
# --backlog 32: Smaller connection backlog
exec "$VENV_PATH/bin/python" -m uvicorn main:app \
--host 0.0.0.0 \
--port ${APP_PORT} \
--workers 1 \
--loop asyncio \
--no-access-log \
--log-level warning \
--limit-concurrency 10 \
--timeout-keep-alive 5 \
--backlog 32 \
--no-use-colors