Files
crypto_monitor_user/deploy/nginx_ai_review_timeouts.sh
dekun 53863559f4 Initialize crypto_monitor_user (user edition) from monitor codebase.
Retarget git remote, install path, and deploy docs from crypto_monitor to crypto_monitor_user.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-17 16:18:13 +08:00

93 lines
2.8 KiB
Bash

#!/usr/bin/env bash
# 拉长宝塔 Nginx 反代读/写超时,避免 AI 复盘(1~3 分钟)被 60s 默认切断返回 504.
# 用法: bash deploy/nginx_ai_review_timeouts.sh
# 可选: TIMEOUT_SEC=360 bash deploy/nginx_ai_review_timeouts.sh
set -euo pipefail
TIMEOUT_SEC="${TIMEOUT_SEC:-360}"
PROXY_ROOT="${PROXY_ROOT:-/www/server/panel/vhost/nginx/proxy}"
SITES=(okx.hyf2.cc bn.hyf2.cc gt1.hyf2.cc zk.hyf2.cc)
if [[ ! -d "$PROXY_ROOT" ]]; then
echo "skip: no BT nginx proxy dir at $PROXY_ROOT"
exit 0
fi
patched=0
for site in "${SITES[@]}"; do
dir="$PROXY_ROOT/$site"
[[ -d "$dir" ]] || continue
shopt -s nullglob
for conf in "$dir"/*.conf; do
# 已有同秒数则跳过
if grep -qE "proxy_read_timeout[[:space:]]+${TIMEOUT_SEC}" "$conf"; then
echo "ok (unchanged): $conf"
continue
fi
# 去掉旧的超时行,再在 proxy_http_version 后插入
tmp="$(mktemp)"
grep -vE 'proxy_(connect|send|read)_timeout' "$conf" >"$tmp" || true
if grep -q 'proxy_http_version' "$tmp"; then
awk -v t="$TIMEOUT_SEC" '
{print}
/proxy_http_version/ && !done {
print " proxy_connect_timeout " t "s;"
print " proxy_send_timeout " t "s;"
print " proxy_read_timeout " t "s;"
done=1
}
' "$tmp" >"$conf"
else
# 兜底:插到 proxy_pass 后
awk -v t="$TIMEOUT_SEC" '
{print}
/proxy_pass/ && !done {
print " proxy_connect_timeout " t "s;"
print " proxy_send_timeout " t "s;"
print " proxy_read_timeout " t "s;"
done=1
}
' "$tmp" >"$conf"
fi
rm -f "$tmp"
echo "patched: $conf -> ${TIMEOUT_SEC}s"
patched=$((patched + 1))
done
done
# 同步抬高全局默认,防止其它 location 仍用 60s
GLOBAL_PROXY="${GLOBAL_PROXY:-/www/server/nginx/conf/proxy.conf}"
if [[ -f "$GLOBAL_PROXY" ]]; then
if grep -qE "proxy_read_timeout[[:space:]]+${TIMEOUT_SEC}" "$GLOBAL_PROXY"; then
echo "ok (unchanged): $GLOBAL_PROXY"
else
cp -a "$GLOBAL_PROXY" "${GLOBAL_PROXY}.bak.ai_timeout"
sed -i -E \
-e "s/proxy_connect_timeout[[:space:]]+[0-9]+;/proxy_connect_timeout ${TIMEOUT_SEC};/" \
-e "s/proxy_read_timeout[[:space:]]+[0-9]+;/proxy_read_timeout ${TIMEOUT_SEC};/" \
-e "s/proxy_send_timeout[[:space:]]+[0-9]+;/proxy_send_timeout ${TIMEOUT_SEC};/" \
"$GLOBAL_PROXY"
echo "patched: $GLOBAL_PROXY -> ${TIMEOUT_SEC}s"
patched=$((patched + 1))
fi
fi
if [[ "$patched" -eq 0 ]]; then
echo "done (nothing to patch)"
exit 0
fi
if command -v nginx >/dev/null 2>&1; then
nginx -t
# 宝塔常用 reload
if [[ -x /etc/init.d/nginx ]]; then
/etc/init.d/nginx reload
else
nginx -s reload
fi
echo "nginx reloaded"
else
echo "warn: nginx binary not found; configs patched but not reloaded"
fi
echo "done"