python3 -m http.server 临时文件服务器:为什么跑着跑着就断了? python3 -m http.server是 Python 自带的零依赖 HTTP 文件服务器,在当前目录起一个服务,局域网内别人用浏览器或wget就能下载文件。临时传个文件特别方便 —— 不用装 nginx,不用配 FTP,一行命令搞定。但很多人都遇到过同一个坑:服务跑着跑着,过一段时间另一台电脑就访问不了了。这篇就讲清楚它的基本用法,以及断开背后到底发生了什么。基本用法# 当前目录,默认端口 8000,默认绑 0.0.0.0(局域网可访问)python3-mhttp.server# 指定端口python3-mhttp.server9000# 指定目录,不用先 cdpython3-mhttp.server-d/path/to/dir8000# 只允许本机访问python3-mhttp.server--bind127.0.0.1查自己的 IP 发给别人:hostname -I或ip -4 addr | grep inet。对方浏览器访问http://你的IP:8000,或命令行wget http://你的IP:8000/文件名。⚠️ 它是明文 HTTP、无认证、可列目录,只适合在可信局域网内临时传文件,切勿暴露到公网。为什么跑一段时间就断,别人就访问不了?先纠正一个直觉:服务本身不会自己定时退出。http.server没有任何超时自杀逻辑,它会一直监听直到进程被杀。所以断开几乎都是外部原因导致的 —— 要么进程被杀了,要么网络变了。按概率从高到低排查:1. 终端 / SSH 会话断了(最常见)如果是在 SSH 或某个终端窗口里前台直接跑的,一旦那个会话断开 —— 关窗口、SSH 空闲超时、笔记本合盖休眠 —— 进程会收到SIGHUP信号被杀掉,对方瞬间就访问不了了。这是绝大多数人踩的坑:命令明明还开着(其实终端已经没了),却怎么也连不上。解法:让服务脱离终端运行。# 方式 A:nohup 后台,关终端也不受影响nohuppython3-mhttp.server8000/tmp/httpd.log21# 方式 B:tmux(推荐,随时能切回去看日志、看是否还活着)tmux new-shttpdpython3 -m http.server 8000tmux方式尤其省心:服务在独立会话里跑,你可以随时tmux attach -t httpd回去查看请求日志,关掉当前终端也完全不影响它。2. 电脑睡眠 / 网卡休眠笔记本一段时间无操作后进入休眠,或网卡因省电策略断开 —— 这时 IP 配置可能还在,但服务进程被挂起、网络栈停摆,对方自然连不上。台式机或常开的服务器一般没这个问题。如果你用的是笔记本做临时服务器,记得先关掉自动休眠。3. IP 变了(DHCP 续租)你的机器 IP 是路由器通过 DHCP 动态分配的,租约到期后可能被重新分配成另一个地址。你这边服务好好的,但对方还在用旧 IP 访问,自然就连不上了。用hostname -I确认一下当前 IP 是不是和当初发给别人的不一样。要彻底避免,可以在路由器里给这台机器绑定静态 IP。4. 单线程被慢连接阻塞(表现为卡而非断)http.server默认是单线程的,一个很慢的请求(比如对方网络差、在拉一个大文件)可能会堵住后面排队的请求。这种症状是页面转圈/超时,而不是彻底连不上,和前三种的断开不太一样,但在传大文件、多人同时下载时值得留意。小结现象最可能原因解法关终端后立刻失联SIGHUP杀进程tmux或nohup后台跑闲置一会儿失联电脑 / 网卡休眠关闭自动休眠,或用常开机器隔一段时间连不上DHCP 导致 IP 变了hostname -I重新确认,或绑静态 IP能连但很慢 / 卡住单线程被慢连接阻塞避免并发拉大量大文件九成情况是第 1 条。记住一句话就够了:别在前台终端里裸跑,丢进tmux里,关掉终端、断开 SSH 都不会断,这是最省心的做法。