树莓派重启自动运行Python3 Web服务器报errno 99错误如何解决
报错原因
[errno 99]: Cannot Assign Request Address 报错核心原因:自启任务执行时机早于Wlan0网卡IP分配完成时间,代码硬编码绑定的
172.X.X.X此时未挂载到网卡,无法完成地址绑定。手动运行时系统网络已完成初始化,因此可正常启动。
解决方案
方案1:修改代码监听地址(最简单通用)
将代码中服务器绑定地址从固定IP改为0.0.0.0,表示监听所有网卡的所有可用IP,不受单网卡IP分配时机影响,访问效果和绑定固定IP完全一致。
修改代码中对应行:
# 原代码 server_address_httpd = ('172.X.X.X',8080) # 修改后 server_address_httpd = ('0.0.0.0',8080)
修改后原有自启配置无需调整,重启即可正常生效。
方案2:保留固定IP绑定,调整自启逻辑
如果需要限制服务仅绑定指定172.X.X.X地址,可调整自启配置等待网络就绪后再启动服务:
rc.local配置调整
在原有Python启动命令前添加网络检测逻辑,示例如下(替换为你自己的脚本路径):
# 方式1:加固定延时,10秒足够大部分场景完成Wlan0 IP分配 sleep 10 && python3 /你的脚本绝对路径/server.py & # 方式2:精准检测网络就绪,172.X.X.1替换为你网段的网关地址 until ping -c1 172.X.X.1 >/dev/null 2>&1; do sleep 1; done && python3 /你的脚本绝对路径/server.py &
crontab配置调整
给@reboot规则添加延时参数:
@reboot sleep 15 && python3 /你的脚本绝对路径/server.py
高可靠方案:systemd配置自启
无需手动加延时,系统会自动等待网络就绪后启动,且支持服务崩溃自动重启:
- 新建服务配置文件:
sudo nano /etc/systemd/system/webserver.service - 写入以下配置(替换为你自己的用户名和脚本路径):
[Unit] Description=Python Web Server After=network.target wpa_supplicant.service [Service] User=pi ExecStart=/usr/bin/python3 /home/pi/你的脚本路径/server.py Restart=always RestartSec=5 [Install] WantedBy=multi-user.target
- 执行命令启用服务:
sudo systemctl daemon-reload sudo systemctl enable webserver.service
配置完成后重启即可生效。
内容的提问来源于stack exchange,提问作者sya
相关产品推荐
相关产品推荐

