82 lines
2.3 KiB
Bash
82 lines
2.3 KiB
Bash
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
is_worker_command() {
|
|
local joined="$*"
|
|
case "$joined" in
|
|
*"celery -A iaai_scraper.worker.celery_app worker"*|*" celery -A iaai_scraper.worker.celery_app worker"*)
|
|
return 0
|
|
;;
|
|
esac
|
|
return 1
|
|
}
|
|
|
|
is_scrape_cli_command() {
|
|
local joined="$*"
|
|
case "$joined" in
|
|
*"collect-listing"*|*"scrape-vehicle"*|*"sync-vehicle"*|*"sync-listing"*)
|
|
return 0
|
|
;;
|
|
esac
|
|
return 1
|
|
}
|
|
|
|
needs_browser_runtime() {
|
|
is_worker_command "$@" || is_scrape_cli_command "$@"
|
|
}
|
|
|
|
start_proxy_bridge_if_needed() {
|
|
if ! needs_browser_runtime "$@"; then
|
|
return 0
|
|
fi
|
|
|
|
if [ -z "${SOCKS5_PROXY_HOST:-}" ]; then
|
|
return 0
|
|
fi
|
|
|
|
echo "[entrypoint] Starting proxy bridge (HTTP :8899 → SOCKS5 ${SOCKS5_PROXY_HOST}:${SOCKS5_PROXY_PORT:-1002})..."
|
|
|
|
if [ -z "${IAAI_PROXY_SERVER:-}" ]; then
|
|
export IAAI_PROXY_SERVER="http://127.0.0.1:8899"
|
|
elif [ "${IAAI_PROXY_SERVER}" = "http://localhost:8899" ]; then
|
|
export IAAI_PROXY_SERVER="http://127.0.0.1:8899"
|
|
fi
|
|
|
|
echo "[entrypoint] Using browser proxy: ${IAAI_PROXY_SERVER}"
|
|
|
|
# Watchdog: автоматически рестартует bridge при падении.
|
|
# Нужно для долгоиграющих контейнеров (месяцы аптайма): без watchdog
|
|
# упавший bridge тихо ломает весь скрапинг и IAAI начинает банить реальный IP VPS.
|
|
(
|
|
while true; do
|
|
python -m iaai_scraper.proxy_bridge
|
|
EXIT_CODE=$?
|
|
echo "[entrypoint] proxy_bridge exited with code ${EXIT_CODE}; restarting in 3s..."
|
|
sleep 3
|
|
done
|
|
) &
|
|
BRIDGE_WATCHDOG_PID=$!
|
|
sleep 1
|
|
|
|
if ! kill -0 "${BRIDGE_WATCHDOG_PID}" 2>/dev/null; then
|
|
echo "[entrypoint] ERROR: proxy_bridge watchdog failed to start"
|
|
exit 1
|
|
fi
|
|
|
|
# Проверяем что bridge действительно слушает порт.
|
|
for i in 1 2 3 4 5; do
|
|
if python -c "import socket,sys; s=socket.socket(); s.settimeout(2); sys.exit(0 if s.connect_ex(('127.0.0.1', 8899))==0 else 1)" 2>/dev/null; then
|
|
echo "[entrypoint] Proxy bridge listening on :8899 (watchdog PID ${BRIDGE_WATCHDOG_PID})"
|
|
return 0
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
echo "[entrypoint] ERROR: proxy_bridge did not start listening on :8899"
|
|
exit 1
|
|
}
|
|
|
|
start_proxy_bridge_if_needed "$@"
|
|
|
|
exec "$@"
|