| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- #!/bin/sh
- # 加载公共函数库
- . /app/common.sh
- # 设置定时任务
- setup_cron() {
- # 获取当前时间的上一分钟作为执行时间
- # 格式: 分 时 * * *
- current_min=$(date +%M)
- current_hour=$(date +%H)
-
- # 计算上一分钟对应的分钟和小时
- if [ "$current_min" -eq 0 ]; then
- cron_min=59
- if [ "$current_hour" -eq 0 ]; then
- cron_hour=23
- else
- cron_hour=$((current_hour - 1))
- fi
- else
- cron_min=$((current_min - 1))
- cron_hour=$current_hour
- fi
-
- # 去掉前导零(避免被解释为八进制)
- cron_min=$(echo $cron_min | sed 's/^0//')
- cron_hour=$(echo $cron_hour | sed 's/^0//')
-
- # 如果为空则设为0
- [ -z "$cron_min" ] && cron_min=0
- [ -z "$cron_hour" ] && cron_hour=0
-
- cron_entry="$cron_min $cron_hour * * * sh $UPDATE_SCRIPT >> /app/update.log 2>&1"
-
- echo "设置定时任务: 每天 ${cron_hour}:${cron_min} 执行更新检测"
-
- # 确保cron目录存在
- mkdir -p /var/spool/cron/crontabs
-
- # 删除旧的更新任务(如果存在)
- if [ -f "$CRON_FILE" ]; then
- grep -v "$UPDATE_SCRIPT" "$CRON_FILE" > "${CRON_FILE}.tmp" 2>/dev/null || true
- mv "${CRON_FILE}.tmp" "$CRON_FILE"
- fi
-
- # 添加新的定时任务
- echo "$cron_entry" >> "$CRON_FILE"
-
- # 启动crond(busybox crond)
- crond -b -l 8
- echo "crond 已启动"
- }
- # 仅更新模式(构建时使用)
- if [ "${1}" = "OnlyUpdate" ]; then
- echo "构建模式:下载初始版本..."
-
- ftag_name=$(get_latest_version)
-
- if [ -z "$ftag_name" ]; then
- echo "无法获取最新版本号,使用默认版本 ${DEFAULT_VERSION}"
- ftag_name="$DEFAULT_VERSION"
- fi
-
- echo "版本: ${ftag_name}"
-
- if download_version "$ftag_name" "$MIXAPI_BIN"; then
- save_version "$ftag_name"
- echo "下载完成"
- else
- echo "下载失败"
- exit 1
- fi
-
- exit 0
- fi
- # 正常启动模式
- echo "启动 mixapi 服务..."
- # 检查本地是否有可执行文件
- if [ ! -f "$MIXAPI_BIN" ]; then
- echo "本地没有可执行文件,先下载..."
- ftag_name=$(get_latest_version)
- if [ -z "$ftag_name" ]; then
- ftag_name="$DEFAULT_VERSION"
- fi
- download_version "$ftag_name" "$MIXAPI_BIN"
- save_version "$ftag_name"
- fi
- # 设置定时任务
- setup_cron
- # 启动时先执行一次更新检测(后台)
- echo "启动时执行一次更新检测..."
- sh "$UPDATE_SCRIPT" &
- # 启动 mixapi(前台运行,保持容器运行)
- echo "启动 mixapi..."
- exec "$MIXAPI_BIN"
|