entrypoint.sh 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. # 保存环境变量
  9. env >> /etc/environment
  10. case "${RUN_MODE:-cron}" in
  11. "once")
  12. echo "🔄 单次执行"
  13. exec /usr/local/bin/python -m trendradar
  14. ;;
  15. "cron")
  16. # 生成 crontab
  17. echo "${CRON_SCHEDULE:-*/30 * * * *} cd /app && /usr/local/bin/python -m trendradar" > /tmp/crontab
  18. echo "📅 生成的crontab内容:"
  19. cat /tmp/crontab
  20. if ! /usr/local/bin/supercronic -test /tmp/crontab; then
  21. echo "❌ crontab格式验证失败"
  22. exit 1
  23. fi
  24. # 立即执行一次(如果配置了)
  25. if [ "${IMMEDIATE_RUN:-false}" = "true" ]; then
  26. echo "▶️ 立即执行一次"
  27. /usr/local/bin/python -m trendradar
  28. fi
  29. # 启动 Web 服务器(如果配置了)
  30. if [ "${ENABLE_WEBSERVER:-false}" = "true" ]; then
  31. echo "🌐 启动 Web 服务器..."
  32. /usr/local/bin/python manage.py start_webserver
  33. WEBSERVER_WATCHDOG_ENABLED=$(echo "${WEBSERVER_WATCHDOG:-true}" | tr '[:upper:]' '[:lower:]')
  34. WEBSERVER_WATCHDOG_INTERVAL=${WEBSERVER_WATCHDOG_INTERVAL:-60}
  35. if [ "$WEBSERVER_WATCHDOG_ENABLED" = "true" ] || [ "$WEBSERVER_WATCHDOG_ENABLED" = "1" ] || [ "$WEBSERVER_WATCHDOG_ENABLED" = "yes" ] || [ "$WEBSERVER_WATCHDOG_ENABLED" = "on" ]; then
  36. # 启动后台 watchdog 定期检查 Web 服务器健康状态
  37. echo "🔄 启动 Web 服务器 watchdog (间隔: ${WEBSERVER_WATCHDOG_INTERVAL}s)..."
  38. (
  39. while true; do
  40. sleep "$WEBSERVER_WATCHDOG_INTERVAL"
  41. /usr/local/bin/python manage.py webserver_autofix
  42. done
  43. ) &
  44. WEBSERVER_WATCHDOG_PID=$!
  45. echo " ✅ watchdog 已启动 (PID: $WEBSERVER_WATCHDOG_PID)"
  46. else
  47. echo "⏸️ Web 服务器 watchdog 已禁用"
  48. fi
  49. fi
  50. echo "⏰ 启动supercronic: ${CRON_SCHEDULE:-*/30 * * * *}"
  51. echo "🎯 supercronic 将作为 PID 1 运行"
  52. exec /usr/local/bin/supercronic -passthrough-logs /tmp/crontab
  53. ;;
  54. *)
  55. exec "$@"
  56. ;;
  57. esac