下载失败时,如何清理缓存

通常情况下, KSpeeder 下载失败都是由于临时的网络问题或者磁盘缓存不一致导致的问题,我们暂时还没有很好的办法系统解决此问题,因此可以先通过两种方法解决:

  • 清理缓存
  • 重新启动 KSpeeder

以上方式能解决 99% 的下载失败问题,如果还不能解决问题,可以联系我们。

清理缓存

方法一:通过管理界面清理缓存

  • 打开管理界面( 通常是 http://localhost:5003 或你安装 kspeeder 机器的 IP 地址 )后,点击 UI 上的清理缓存即可

方法2️:使用冷冰同学的一键清理脚本

感谢热心用户 冷冰 同学的贡献!冷冰友情提示:

多人共用服务 请小心使用
引起打架斗殴 作者概不负责

Bash 脚本(将脚本内容复制到你的设备,保存为 ksp-clean, 然后添加可执行权限,按上面的帮助执行 ):

#!/usr/bin/env bash
# KSpeeder 缓存清理脚本
#
# 用法: ksp-clean [host] [选项]
#
# 选项:
#   -v, --verbose    显示详细信息
#   -h, --help       显示帮助信息
#
# 参数:
#   host             目标主机 (默认: registry.linkease.net:5003)
#
# 示例:
#   ksp-clean
#   ksp-clean -v
#   ksp-clean registry.example.com:8080 --verbose

set -euo pipefail

GREEN='\033[32m'
RED='\033[31m'
RESET='\033[0m'

VERBOSE=false
HOST="registry.linkease.net:5003"

for arg in "$@"; do
  case "$arg" in
    -h|--help)
      sed -n '2,16p' "$0" | sed 's/^# //; s/^#$//'
      exit 0
      ;;
    -v|--verbose)
      VERBOSE=true
      ;;
    *)
      if [[ ! "$arg" =~ ^- ]]; then
        HOST="$arg"
      fi
      ;;
  esac
done

URL="http://${HOST}/api/cache/cleanup"
REFERER="http://${HOST}/"
ORIGIN="http://${HOST}"

RESPONSE=$(curl --url "${URL}" \
  -X 'POST' \
  -H 'Accept: application/json, text/plain, */*' \
  -H 'Accept-Language: zh-CN,zh;q=0.9,zh-Hans;q=0.8' \
  -H 'Content-Length: 0' \
  -H "Origin: ${ORIGIN}" \
  -H 'Proxy-Connection: keep-alive' \
  -H "Referer: ${REFERER}" \
  -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/152.0.0.0 Safari/537.36' \
  --insecure \
  --silent \
  --show-error)

STATUS=$(echo "$RESPONSE" | jq -r '.status // "error"')

if [[ "$STATUS" == "ok" ]]; then
  echo -e "${GREEN}✓ 清理成功${RESET}"
  if [[ "$VERBOSE" == true ]]; then
    echo "$RESPONSE" | jq -r '
      "  缓存路径: \(.cache_path)",
      "  删除条目: \(.deleted_entries)",
      "  跳过条目: \(.skipped_entries)",
      "  错误数:   \(.errors)",
      "  耗时:     \(.took_ms)ms"
    '
  fi
  exit 0
else
  echo -e "${RED}✗ 清理失败${RESET}"
  echo "$RESPONSE" | jq '.'
  exit 1
fi

node 脚本(如果你有 nodejs 环境,也可以用 node 版本,内容保存为 ksp-clean,添加可执行权限,然后执行即可):

#!/usr/bin/env node

const args = process.argv.slice(2);

if (args.includes('-h') || args.includes('--help')) {
  console.log(`用法: ksp-clean [host] [选项]

选项:
  -v, --verbose    显示详细信息
  -h, --help       显示帮助信息

参数:
  host             目标主机 (默认: registry.linkease.net:5003)

示例:
  ksp-clean
  ksp-clean -v
  ksp-clean registry.example.com:8080 --verbose`);
  process.exit(0);
}

const verbose = args.includes('-v') || args.includes('--verbose');
const host = args.find(arg => !arg.startsWith('-')) || 'registry.linkease.net:5003';

const GREEN = '\x1b[32m';
const RED = '\x1b[31m';
const RESET = '\x1b[0m';

async function main() {
  const url = `http://${host}/api/cache/cleanup`;
  
  try {
    const res = await fetch(url, {
      method: 'POST',
      headers: {
        'accept': 'application/json, text/plain, */*',
        'accept-language': 'zh-CN,zh;q=0.9,zh-Hans;q=0.8',
        'proxy-connection': 'keep-alive',
        'Referer': `http://${host}/`
      }
    });

    const data = await res.json();

    if (data.status === 'ok') {
      console.log(`${GREEN}✓ 清理成功${RESET}`);
      if (verbose) {
        console.log(`  缓存路径: ${data.cache_path}`);
        console.log(`  删除条目: ${data.deleted_entries}`);
        console.log(`  跳过条目: ${data.skipped_entries}`);
        console.log(`  错误数:   ${data.errors}`);
        console.log(`  耗时:     ${data.took_ms}ms`);
      }
      process.exit(0);
    } else {
      console.log(`${RED}✗ 清理失败${RESET}`);
      console.log(JSON.stringify(data, null, 2));
      process.exit(1);
    }
  } catch (err) {
    console.log(`${RED}✗ 请求失败${RESET}`);
    console.error(err.message);
    process.exit(1);
  }
}

main();
1 个赞