| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #!/bin/bash
- set -e
- # 检查配置文件
- if [ ! -f "/app/config/config.yaml" ] || [ ! -f "/app/config/frequency_words.txt" ]; then
- echo "❌ 配置文件缺失"
- exit 1
- fi
- case "${RUN_MODE:-cron}" in
- "once")
- echo "🔄 单次执行"
- exec /usr/local/bin/python -m trendradar
- ;;
- "cron")
- # 校验 CRON_SCHEDULE 格式(仅允许 cron 表达式合法字符)
- CRON_EXPR="${CRON_SCHEDULE:-*/30 * * * *}"
- if ! echo "$CRON_EXPR" | grep -qE '^[0-9*/,\-[:space:]]+$'; then
- echo "❌ CRON_SCHEDULE 格式非法: $CRON_EXPR"
- exit 1
- fi
- # 生成 crontab
- echo "$CRON_EXPR cd /app && /usr/local/bin/python -m trendradar" > /tmp/crontab
-
- echo "📅 生成的crontab内容:"
- cat /tmp/crontab
- if ! /usr/local/bin/supercronic -test /tmp/crontab; then
- echo "❌ crontab格式验证失败"
- exit 1
- fi
- # 立即执行一次(如果配置了)
- if [ "${IMMEDIATE_RUN:-false}" = "true" ]; then
- echo "▶️ 立即执行一次"
- /usr/local/bin/python -m trendradar
- fi
- # 启动 Web 服务器(如果配置了)
- if [ "${ENABLE_WEBSERVER:-false}" = "true" ]; then
- echo "🌐 启动 Web 服务器..."
- /usr/local/bin/python manage.py start_webserver
- WEBSERVER_WATCHDOG_ENABLED=$(echo "${WEBSERVER_WATCHDOG:-true}" | tr '[:upper:]' '[:lower:]')
- WEBSERVER_WATCHDOG_INTERVAL=${WEBSERVER_WATCHDOG_INTERVAL:-60}
- if [ "$WEBSERVER_WATCHDOG_ENABLED" = "true" ] || [ "$WEBSERVER_WATCHDOG_ENABLED" = "1" ] || [ "$WEBSERVER_WATCHDOG_ENABLED" = "yes" ] || [ "$WEBSERVER_WATCHDOG_ENABLED" = "on" ]; then
- # 启动后台 watchdog 定期检查 Web 服务器健康状态
- echo "🔄 启动 Web 服务器 watchdog (间隔: ${WEBSERVER_WATCHDOG_INTERVAL}s)..."
- (
- while true; do
- sleep "$WEBSERVER_WATCHDOG_INTERVAL"
- /usr/local/bin/python manage.py webserver_autofix
- done
- ) &
- WEBSERVER_WATCHDOG_PID=$!
- echo " ✅ watchdog 已启动 (PID: $WEBSERVER_WATCHDOG_PID)"
- else
- echo "⏸️ Web 服务器 watchdog 已禁用"
- fi
- fi
- echo "⏰ 启动supercronic: $CRON_EXPR"
- echo "🎯 supercronic 将作为 PID 1 运行"
- exec /usr/local/bin/supercronic -passthrough-logs /tmp/crontab
- ;;
- *)
- exec "$@"
- ;;
- esac
|