56 lines
1.5 KiB
Bash
56 lines
1.5 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
PLATFORM="${PLATFORM:-boss}"
|
|
INSTANCES="${INSTANCES:-1}"
|
|
|
|
echo "=========================================="
|
|
echo " Spider Container"
|
|
echo " Platform: ${PLATFORM}"
|
|
echo " Instances: ${INSTANCES}"
|
|
echo " API: ${API_BASE_URL}"
|
|
echo " Delay: ${SLEEP_MIN_SECONDS}-${SLEEP_MAX_SECONDS}s"
|
|
echo " Inline Co: ${INLINE_COMPANY}"
|
|
echo "=========================================="
|
|
|
|
# 平台 -> Python 模块映射
|
|
case "${PLATFORM}" in
|
|
boss) MODULE="spiderJobs.platforms.boss.main" ;;
|
|
qcwy) MODULE="spiderJobs.platforms.job51.main" ;;
|
|
zhilian) MODULE="spiderJobs.platforms.zhilian.main" ;;
|
|
*)
|
|
echo "[ERROR] Unknown PLATFORM: ${PLATFORM}"
|
|
echo " Supported: boss, qcwy, zhilian"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# 启动多个实例(最后一个前台运行)
|
|
PIDS=()
|
|
for i in $(seq 1 $((INSTANCES - 1))); do
|
|
echo "[spider] Starting ${PLATFORM} instance ${i}/${INSTANCES} (background)..."
|
|
python -m "${MODULE}" &
|
|
PIDS+=($!)
|
|
sleep 2 # 错开启动,避免同时抢同一个关键词
|
|
done
|
|
|
|
echo "[spider] Starting ${PLATFORM} instance ${INSTANCES}/${INSTANCES} (foreground)..."
|
|
python -m "${MODULE}" &
|
|
PIDS+=($!)
|
|
|
|
# 等待所有子进程,任一退出则全部退出
|
|
wait_and_cleanup() {
|
|
echo "[spider] Shutting down all instances..."
|
|
for pid in "${PIDS[@]}"; do
|
|
kill "$pid" 2>/dev/null || true
|
|
done
|
|
wait
|
|
echo "[spider] All instances stopped."
|
|
}
|
|
|
|
trap wait_and_cleanup SIGTERM SIGINT
|
|
|
|
# 等任意子进程退出
|
|
wait -n
|
|
wait_and_cleanup
|