#!/bin/sh # 公共变量 VERSION_FILE="/app/version.txt" MIXAPI_BIN="/app/mixapi" MIXAPI_NEW="/app/mixapi.new" UPDATE_SCRIPT="/app/check_update.sh" CRON_FILE="/var/spool/cron/crontabs/root" DEFAULT_VERSION="v1.2" # 国内使用 GitHub 代理加速 # 支持通过环境变量 GITHUB_PROXY 覆盖默认代理 # 备用代理列表(按优先级排序) GITHUB_PROXY_LIST="${GITHUB_PROXY:-https://mirror.ghproxy.com https://gh.ddlc.top https://ghfast.top https://github.moeyy.xyz}" # 测试代理是否可用 test_proxy() { local proxy=$1 local test_url="${proxy}/https://api.github.com/repos/aiprodcoder/MIXAPI/releases/latest" wget -qO- --timeout=10 "$test_url" >/dev/null 2>&1 return $? } # 获取可用的代理 get_working_proxy() { for proxy in $GITHUB_PROXY_LIST; do echo "测试代理: $proxy" >&2 if test_proxy "$proxy"; then echo "代理可用: $proxy" >&2 echo "$proxy" return 0 fi echo "代理不可用: $proxy" >&2 done echo "" return 1 } # 获取最新版本号(带重试机制) get_latest_version() { local proxy for proxy in $GITHUB_PROXY_LIST; do local api_url="${proxy}/https://api.github.com/repos/aiprodcoder/MIXAPI/releases/latest" local version=$(wget -qO- --timeout=15 "$api_url" 2>/dev/null | sed -n 's/.*"tag_name":[[:space:]]*"\([^"]*\)".*/\1/p') if [ -n "$version" ]; then # 保存可用的代理供后续使用 WORKING_PROXY="$proxy" echo "$version" return 0 fi done echo "" return 1 } # 获取架构对应的文件名后缀 get_arch_suffix() { local arch="$(uname -m)" case "$arch" in 'x86_64') echo "linux-amd64" ;; 'aarch64') echo "linux-arm64" ;; *) echo "" ;; esac } # 下载指定版本(带多代理重试机制) # 参数: $1=版本号, $2=目标文件路径 download_version() { local version=$1 local target=$2 local arch_suffix=$(get_arch_suffix) if [ -z "$arch_suffix" ]; then echo "不支持的架构: $(uname -m)" return 1 fi local filename="mixapi-${version}-${arch_suffix}" local github_path="https://github.com/aiprodcoder/MIXAPI/releases/download/${version}/${filename}" # 如果之前已经找到可用代理,优先使用 if [ -n "$WORKING_PROXY" ]; then local url="${WORKING_PROXY}/${github_path}" echo "下载地址: ${url}" wget -qO "$target" --timeout=60 "$url" 2>/dev/null if [ $? -eq 0 ] && [ -s "$target" ]; then chmod +x "$target" return 0 fi fi # 遍历所有代理尝试下载 for proxy in $GITHUB_PROXY_LIST; do local url="${proxy}/${github_path}" echo "尝试下载: ${url}" wget -qO "$target" --timeout=60 "$url" 2>/dev/null if [ $? -eq 0 ] && [ -s "$target" ]; then chmod +x "$target" WORKING_PROXY="$proxy" echo "下载成功 (代理: $proxy)" return 0 fi echo "下载失败,尝试下一个代理..." rm -f "$target" done echo "所有代理均下载失败" return 1 } # 获取当前版本 get_current_version() { if [ -f "$VERSION_FILE" ]; then cat "$VERSION_FILE" else echo "" fi } # 保存版本号 save_version() { echo "$1" > "$VERSION_FILE" } # 查找 mixapi 进程 PID find_mixapi_pid() { local pid="" pid=$(ps aux 2>/dev/null | grep "$MIXAPI_BIN" | grep -v grep | awk '{print $1}' | head -1) if [ -z "$pid" ]; then # busybox ps 格式不同,尝试另一种方式 pid=$(ps | grep "$MIXAPI_BIN" | grep -v grep | awk '{print $1}' | head -1) fi echo "$pid" }