#!/bin/sh set -eu PORT="${PORT:-7860}" # Start a dummy HTTP server on the required port so Hugging Face Space health check passes echo "Starting dummy HTTP server on port $PORT" cat << 'EOF' > /tmp/dummy_server.py import http.server, socketserver, json, sys class Handler(http.server.SimpleHTTPRequestHandler): def do_GET(self): self.send_response(200) self.send_header('Content-type', 'application/json') self.end_headers() self.wfile.write(json.dumps({'service': 'OmniBiMol Worker', 'status': 'ok'}).encode()) port = int(sys.argv[1]) socketserver.TCPServer(('', port), Handler).serve_forever() EOF python3 /tmp/dummy_server.py "$PORT" & # Start all async workers used by the hosted API. Each worker claims only its # own job type, so they can share the same database-backed queue safely. echo "Starting docking worker..." python -m backend.workers.docking_worker & DOCKING_WORKER_PID=$! echo "Starting protein pathway worker..." python -m backend.workers.protein_pathway_pipeline_worker & PROTEIN_PATHWAY_WORKER_PID=$! trap 'kill "$DOCKING_WORKER_PID" "$PROTEIN_PATHWAY_WORKER_PID" 2>/dev/null || true' INT TERM while true; do for pid in "$DOCKING_WORKER_PID" "$PROTEIN_PATHWAY_WORKER_PID"; do if ! kill -0 "$pid" 2>/dev/null; then wait "$pid" || exit_code=$? kill "$DOCKING_WORKER_PID" "$PROTEIN_PATHWAY_WORKER_PID" 2>/dev/null || true exit "${exit_code:-1}" fi done sleep 5 done