entrypoint.sh 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #!/bin/bash
  2. set -e
  3. # 检查配置文件
  4. if [ ! -f "/app/config/config.yaml" ] || [ ! -f "/app/config/frequency_words.txt" ]; then
  5. echo "❌ 配置文件缺失"
  6. exit 1
  7. fi
  8. case "${RUN_MODE:-cron}" in
  9. "once")
  10. echo "🔄 单次执行"
  11. exec /usr/local/bin/python -m trendradar
  12. ;;
  13. "cron")
  14. # 校验 CRON_SCHEDULE 格式(仅允许 cron 表达式合法字符)
  15. CRON_EXPR="${CRON_SCHEDULE:-*/30 * * * *}"
  16. if ! echo "$CRON_EXPR" | grep -qE '^[0-9*/,\-[:space:]]+$'; then
  17. echo "❌ CRON_SCHEDULE 格式非法: $CRON_EXPR"
  18. exit 1
  19. fi
  20. # 生成 crontab
  21. echo "$CRON_EXPR cd /app && /usr/local/bin/python -m trendradar" > /tmp/crontab
  22. echo "📅 生成的crontab内容:"
  23. cat /tmp/crontab
  24. if ! /usr/local/bin/supercronic -test /tmp/crontab; then
  25. echo "❌ crontab格式验证失败"
  26. exit 1
  27. fi
  28. # 立即执行一次(如果配置了)
  29. if [ "${IMMEDIATE_RUN:-false}" = "true" ]; then
  30. echo "▶️ 立即执行一次"
  31. /usr/local/bin/python -m trendradar
  32. fi
  33. # 启动 Web 服务器(如果配置了)
  34. if [ "${ENABLE_WEBSERVER:-false}" = "true" ]; then
  35. echo "🌐 启动 Web 服务器..."
  36. /usr/local/bin/python manage.py start_webserver
  37. WEBSERVER_WATCHDOG_ENABLED=$(echo "${WEBSERVER_WATCHDOG:-true}" | tr '[:upper:]' '[:lower:]')
  38. WEBSERVER_WATCHDOG_INTERVAL=${WEBSERVER_WATCHDOG_INTERVAL:-60}
  39. if [ "$WEBSERVER_WATCHDOG_ENABLED" = "true" ] || [ "$WEBSERVER_WATCHDOG_ENABLED" = "1" ] || [ "$WEBSERVER_WATCHDOG_ENABLED" = "yes" ] || [ "$WEBSERVER_WATCHDOG_ENABLED" = "on" ]; then
  40. # 启动后台 watchdog 定期检查 Web 服务器健康状态
  41. echo "🔄 启动 Web 服务器 watchdog (间隔: ${WEBSERVER_WATCHDOG_INTERVAL}s)..."
  42. (
  43. while true; do
  44. sleep "$WEBSERVER_WATCHDOG_INTERVAL"
  45. /usr/local/bin/python manage.py webserver_autofix
  46. done
  47. ) &
  48. WEBSERVER_WATCHDOG_PID=$!
  49. echo " ✅ watchdog 已启动 (PID: $WEBSERVER_WATCHDOG_PID)"
  50. else
  51. echo "⏸️ Web 服务器 watchdog 已禁用"
  52. fi
  53. fi
  54. echo "⏰ 启动supercronic: $CRON_EXPR"
  55. echo "🎯 supercronic 将作为 PID 1 运行"
  56. exec /usr/local/bin/supercronic -passthrough-logs /tmp/crontab
  57. ;;
  58. *)
  59. exec "$@"
  60. ;;
  61. esac