dryrun.sh live.s 远程币对列表改成每隔3秒重试一次,最多重试5次,如果还不行, 使用空列表

This commit is contained in:
zhangkun9038@dingtalk.com 2026-01-06 08:16:51 +08:00
parent ebdb3adb78
commit 878af56ed5
2 changed files with 74 additions and 40 deletions

View File

@ -22,10 +22,13 @@ get_open_trades_pairs() {
echo "${pairs[@]}"
}
# 2. 从远程接口获取币对列表
# 2. 从远程接口获取币对列表(带重试机制)
get_remote_pairs() {
local remote_url="$1"
local pairs=()
local max_retries=5
local retry_delay=3
local attempt=1
if [ -z "$remote_url" ]; then
echo "⚠️ 未提供远程币对列表URL远程币对列表为空" >&2
@ -33,30 +36,44 @@ get_remote_pairs() {
return
fi
echo "正在从远程URL获取币对列表: $remote_url" >&2
local pairs_json=$(curl -s "$remote_url")
# 重试循环
while [ $attempt -le $max_retries ]; do
echo "正在从远程URL获取币对列表 (尝试 $attempt/$max_retries): $remote_url" >&2
local pairs_json=$(curl -s "$remote_url")
if [ $? -ne 0 ] || [ -z "$pairs_json" ]; then
echo "⚠️ 远程币对列表获取失败,使用空列表" >&2
echo ""
return
fi
local parsed_pairs=$(echo "$pairs_json" | python3 -c "
if [ $? -eq 0 ] && [ -n "$pairs_json" ]; then
# curl 成功且有返回内容,尝试解析
local parsed_pairs=$(echo "$pairs_json" | python3 -c "
import sys, json
data = json.load(sys.stdin)
pairs = [pair.replace('-', '/') for pair in data.get('pairlist', [])]
print(' '.join(pairs) if pairs else '')
try:
data = json.load(sys.stdin)
pairs = [pair.replace('-', '/') for pair in data.get('pairlist', [])]
print(' '.join(pairs) if pairs else '')
except:
pass
")
if [ -n "$parsed_pairs" ]; then
pairs=($parsed_pairs)
echo "从远程获取到币对: ${pairs[*]}" >&2
else
echo "⚠️ 远程币对列表解析为空" >&2
fi
if [ -n "$parsed_pairs" ]; then
pairs=($parsed_pairs)
echo "✓ 从远程成功获取到币对: ${pairs[*]}" >&2
echo "${pairs[*]}"
return 0
fi
fi
echo "${pairs[@]}"
# 如果不是最后一次尝试,等待后重试
if [ $attempt -lt $max_retries ]; then
echo "⚠️ 获取失败,${retry_delay}秒后重试..." >&2
sleep $retry_delay
fi
attempt=$((attempt + 1))
done
# 所有重试都失败
echo "✗ 远程币对列表获取失败(已重试${max_retries}次),使用空列表" >&2
echo ""
return 1
}
# 3. 合并并去重两个币对列表

View File

@ -78,10 +78,13 @@ validate_json_file() {
fi
}
# 3. 从远程URL获取币对列表
# 3. 从远程URL获取币对列表(带重试机制)
get_remote_pairs() {
local remote_url="$1"
local pairs=()
local max_retries=5
local retry_delay=3
local attempt=1
if [ -z "$remote_url" ]; then
echo "⚠️ 未提供远程币对列表URL远程币对列表为空" >&2
@ -89,30 +92,44 @@ get_remote_pairs() {
return
fi
echo "正在从远程URL获取币对列表: $remote_url" >&2
local pairs_json=$(curl -s "$remote_url")
# 重试循环
while [ $attempt -le $max_retries ]; do
echo "正在从远程URL获取币对列表 (尝试 $attempt/$max_retries): $remote_url" >&2
local pairs_json=$(curl -s "$remote_url")
if [ $? -ne 0 ] || [ -z "$pairs_json" ]; then
echo "⚠️ 远程币对列表获取失败,使用空列表" >&2
echo ""
return
fi
local parsed_pairs=$(echo "$pairs_json" | python3 -c "
if [ $? -eq 0 ] && [ -n "$pairs_json" ]; then
# curl 成功且有返回内容,尝试解析
local parsed_pairs=$(echo "$pairs_json" | python3 -c "
import sys, json
data = json.load(sys.stdin)
pairs = [pair.replace('-', '/') for pair in data.get('pairlist', [])]
print(' '.join(pairs) if pairs else '')
try:
data = json.load(sys.stdin)
pairs = [pair.replace('-', '/') for pair in data.get('pairlist', [])]
print(' '.join(pairs) if pairs else '')
except:
pass
")
if [ -n "$parsed_pairs" ]; then
pairs=($parsed_pairs)
echo "从远程获取到币对: ${pairs[*]}" >&2
else
echo "⚠️ 远程币对列表解析为空" >&2
fi
if [ -n "$parsed_pairs" ]; then
pairs=($parsed_pairs)
echo "✓ 从远程成功获取到币对: ${pairs[*]}" >&2
echo "${pairs[*]}"
return 0
fi
fi
echo "${pairs[@]}"
# 如果不是最后一次尝试,等待后重试
if [ $attempt -lt $max_retries ]; then
echo "⚠️ 获取失败,${retry_delay}秒后重试..." >&2
sleep $retry_delay
fi
attempt=$((attempt + 1))
done
# 所有重试都失败
echo "✗ 远程币对列表获取失败(已重试${max_retries}次),使用空列表" >&2
echo ""
return 1
}
# 4. 合并并去重多个币对列表