run.sh 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #!/bin/sh
  2. # 加载公共函数库
  3. . /app/common.sh
  4. # 设置定时任务
  5. setup_cron() {
  6. # 获取当前时间的上一分钟作为执行时间
  7. # 格式: 分 时 * * *
  8. current_min=$(date +%M)
  9. current_hour=$(date +%H)
  10. # 计算上一分钟对应的分钟和小时
  11. if [ "$current_min" -eq 0 ]; then
  12. cron_min=59
  13. if [ "$current_hour" -eq 0 ]; then
  14. cron_hour=23
  15. else
  16. cron_hour=$((current_hour - 1))
  17. fi
  18. else
  19. cron_min=$((current_min - 1))
  20. cron_hour=$current_hour
  21. fi
  22. # 去掉前导零(避免被解释为八进制)
  23. cron_min=$(echo $cron_min | sed 's/^0//')
  24. cron_hour=$(echo $cron_hour | sed 's/^0//')
  25. # 如果为空则设为0
  26. [ -z "$cron_min" ] && cron_min=0
  27. [ -z "$cron_hour" ] && cron_hour=0
  28. cron_entry="$cron_min $cron_hour * * * sh $UPDATE_SCRIPT >> /app/update.log 2>&1"
  29. echo "设置定时任务: 每天 ${cron_hour}:${cron_min} 执行更新检测"
  30. # 确保cron目录存在
  31. mkdir -p /var/spool/cron/crontabs
  32. # 删除旧的更新任务(如果存在)
  33. if [ -f "$CRON_FILE" ]; then
  34. grep -v "$UPDATE_SCRIPT" "$CRON_FILE" > "${CRON_FILE}.tmp" 2>/dev/null || true
  35. mv "${CRON_FILE}.tmp" "$CRON_FILE"
  36. fi
  37. # 添加新的定时任务
  38. echo "$cron_entry" >> "$CRON_FILE"
  39. # 启动crond(busybox crond)
  40. crond -b -l 8
  41. echo "crond 已启动"
  42. }
  43. # 仅更新模式(构建时使用)
  44. if [ "${1}" = "OnlyUpdate" ]; then
  45. echo "构建模式:下载初始版本..."
  46. ftag_name=$(get_latest_version)
  47. if [ -z "$ftag_name" ]; then
  48. echo "无法获取最新版本号,使用默认版本 ${DEFAULT_VERSION}"
  49. ftag_name="$DEFAULT_VERSION"
  50. fi
  51. echo "版本: ${ftag_name}"
  52. if download_version "$ftag_name" "$MIXAPI_BIN"; then
  53. save_version "$ftag_name"
  54. echo "下载完成"
  55. else
  56. echo "下载失败"
  57. exit 1
  58. fi
  59. exit 0
  60. fi
  61. # 正常启动模式
  62. echo "启动 mixapi 服务..."
  63. # 检查本地是否有可执行文件
  64. if [ ! -f "$MIXAPI_BIN" ]; then
  65. echo "本地没有可执行文件,先下载..."
  66. ftag_name=$(get_latest_version)
  67. if [ -z "$ftag_name" ]; then
  68. ftag_name="$DEFAULT_VERSION"
  69. fi
  70. download_version "$ftag_name" "$MIXAPI_BIN"
  71. save_version "$ftag_name"
  72. fi
  73. # 设置定时任务
  74. setup_cron
  75. # 启动时先执行一次更新检测(后台)
  76. echo "启动时执行一次更新检测..."
  77. sh "$UPDATE_SCRIPT" &
  78. # 启动 mixapi(前台运行,保持容器运行)
  79. echo "启动 mixapi..."
  80. exec "$MIXAPI_BIN"