| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- #!/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"
- }
|