# -*- coding: utf-8 -*- r'''查服务器的几个问题: 1. 下午网站为什么停了一段时间 2. 中转站里为什么还有"隧道" 3. 9100 端口上是什么 4. 现在到底有哪些服务在跑、有没有没用的 == 背景 == 用户反馈: * "下午网站有一段时间停了" * "为什么中转站里还有隧道,所有没的东西就删了" * "网站官网不是 <服务器IP> 吗,改成 <服务器IP>:9100,中转站也一样" * "我感觉网站还是不稳定" "隧道"最可能是**早年那套 Cloudflare Tunnel(cloudflared)**的残留 —— 那时候用 `relay.xxmxxs.top` 走隧道,后来换成 nginx + Let's Encrypt 直连(`yk.xxmxxs.top`),隧道应该已经没用了。 如果 cloudflared 还在跑,它可能: * 占着资源 * 隔一段时间重连,把日志刷满 * **跟 nginx 抢同一个域名的流量** —— 这正是"不稳定"的常见原因 ''' from __future__ import annotations import sys from pathlib import Path ROOT = Path(__file__).resolve().parent.parent sys.path.insert(0, str(ROOT / "_build")) from lssh import run # noqa: E402 REMOTE = r''' echo "==== 1. 所有跟本项目相关的 systemd 单元 ====" systemctl list-units --all --no-pager --plain 2>/dev/null \ | grep -iE 'ykxmz|lanremote|cloudflare|cloudflared|tunnel|relay' \ | sed 's/^/ /' || echo " (没有)" echo echo "==== 2. 隧道进程 / 容器 ====" ps -eo pid,etimes,comm,args 2>/dev/null | grep -iE 'cloudflared|frpc|ngrok|tunnel' \ | grep -v grep | sed 's/^/ /' || echo " (没有隧道进程)" echo " --- docker ---" sudo docker ps -a --format ' {{.Names}} {{.Image}} {{.Status}} {{.Ports}}' 2>/dev/null || echo " (docker 不可用)" echo echo "==== 3. 监听端口 ====" sudo ss -tlnp 2>/dev/null | sed 's/^/ /' echo echo "==== 4. 9100 端口是什么 ====" sudo ss -tlnp 2>/dev/null | grep 9100 | sed 's/^/ /' || echo " 9100 上没有东西" echo " 9100 本地能不能连:" curl -s -o /dev/null -w " http://127.0.0.1:9100/ -> %{http_code}\n" --max-time 8 http://127.0.0.1:9100/ 2>&1 || true echo echo "==== 5. nginx 站点 ====" sudo ls -1 /etc/nginx/sites-enabled/ 2>/dev/null | sed 's/^/ /' echo " --- server_name 和 listen ---" sudo grep -hE 'server_name|listen' /etc/nginx/sites-available/* 2>/dev/null | sed 's/^/ /' echo echo "==== 6. 服务状态 ====" for s in nginx ykxmz-relay ykxmz-monitor.timer certbot.timer lanremote-tunnel lanremote-relay cloudflared; do st=$(systemctl is-active $s 2>/dev/null) [ -n "$st" ] && printf ' %-26s %s\n' "$s" "$st" done echo echo "==== 7. 下午有没有异常(journal 里 nginx / relay 的错误)====" echo " --- nginx 今天的 error.log 尾部 ---" sudo tail -25 /var/log/nginx/error.log 2>/dev/null | sed 's/^/ /' || echo " (读不到)" echo " --- ykxmz-relay 最近的重启 ---" sudo journalctl -u ykxmz-relay --since "today" --no-pager 2>/dev/null \ | grep -iE 'start|stop|fail|error|restart' | tail -12 | sed 's/^/ /' || echo " (读不到)" echo echo "==== 8. 内存 / 负载 ====" free -m | sed 's/^/ /' uptime | sed 's/^/ /' echo echo "==== 9. 有没有没用的旧目录 ====" for d in /root/lanremote-relay /root/lanremote /opt/lanremote /root/.cloudflared /etc/cloudflared; do [ -e "$d" ] && echo " 存在: $d ($(sudo du -sh $d 2>/dev/null | cut -f1))" done echo " --- /root 下的目录 ---" sudo ls -1 /root 2>/dev/null | head -20 | sed 's/^/ /' ''' def main() -> int: print("=" * 62) print(" 服务器诊断:隧道 / 9100 / 下午的中断") print("=" * 62) print() out = run(REMOTE, timeout=300, quiet=True) print(out[1] if isinstance(out, tuple) else out) return 0 if __name__ == "__main__": sys.exit(main())