#!/bin/sh set -e # Source common functions . /usr/local/bin/entrypoint-common.sh log "Starting PieFed worker container..." # Run common startup sequence (without migrations) export PIEFED_INIT_CONTAINER=false common_startup # Worker-specific initialization log "Initializing worker container..." # Pre-create log file with correct ownership to prevent permission issues log "Pre-creating log file with proper ownership..." touch /app/logs/pyfedi.log chown piefed:piefed /app/logs/pyfedi.log chmod 664 /app/logs/pyfedi.log # Apply dual logging configuration (file + stdout for OpenObserve) log "Configuring dual logging for OpenObserve..." # Setup dual logging (file + stdout) directly python -c " import logging import sys def setup_dual_logging(): '''Add stdout handlers to existing loggers without disrupting file logging''' # Create a shared console handler console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(logging.INFO) console_handler.setFormatter(logging.Formatter( '%(asctime)s [%(name)s] %(levelname)s: %(message)s' )) # Add console handler to key loggers (in addition to their existing file handlers) loggers_to_enhance = [ 'flask.app', # Flask application logger 'werkzeug', # Web server logger 'celery', # Celery worker logger 'celery.task', # Celery task logger 'celery.worker', # Celery worker logger '' # Root logger ] for logger_name in loggers_to_enhance: logger = logging.getLogger(logger_name) logger.setLevel(logging.INFO) # Check if this logger already has a stdout handler has_stdout_handler = any( isinstance(h, logging.StreamHandler) and h.stream == sys.stdout for h in logger.handlers ) if not has_stdout_handler: logger.addHandler(console_handler) print('Dual logging configured: file + stdout for OpenObserve') # Call the function setup_dual_logging() " # Test Redis connection specifically log "Testing Redis connection for Celery..." python -c " import redis import os r = redis.Redis( host=os.environ.get('REDIS_HOST', 'redis'), port=int(os.environ.get('REDIS_PORT', 6379)), password=os.environ.get('REDIS_PASSWORD') ) r.ping() print('Redis connection successful') " # Start worker services via supervisor log "Starting worker services (celery worker + beat)..." exec "$@"