Ubuntu VPS生产环境Selenium报Chrome进程崩溃问题求助
Selenium+Flask生产环境Chrome崩溃报错修复方案
这个报错的核心诱因是开发环境和生产环境的运行上下文不一致,你已经加了常规的无头运行参数仍报错,按以下顺序排查修复即可:
- 修正Chrome二进制路径配置,排除路径错误
首先执行命令确认Chrome真实安装路径,不要靠默认匹配:
which google-chrome which google-chrome-stableUbuntu环境下
/usr/bin/google-chrome通常是指向google-chrome-stable的软链接,直接打开你代码中注释的二进制路径配置项,显式指定路径,同时注意修正你提到的路径笔误(错误路径/urs/bin/要改成正确的/usr/bin/):option.binary_location = "/usr/bin/google-chrome-stable"- 修正Chrome二进制路径配置,排除路径错误
- 删除冲突的启动参数,解决端口抢占问题
你当前配置的--remote-debugging-port=9222是触发开发正常、生产报错的典型诱因:开发模式是单进程运行,不会出现端口冲突;但生产环境如果用多worker启动Flask,多个Chrome实例会同时抢占9222端口,直接导致Chrome启动失败被判定为崩溃。无桌面VPS环境跑Selenium不需要开启远程调试端口,直接删除这行参数即可。
- 删除冲突的启动参数,解决端口抢占问题
- 修复运行用户权限问题
开发模式下你是用自己登录的main用户手动执行脚本,拥有完整的目录读写权限;但生产环境如果用systemd、Gunicorn+Nginx托管应用,默认运行用户通常是www-data、nobody这类权限极低的系统用户,没有Chrome启动所需的临时目录、配置目录读写权限,会直接导致Chrome启动后秒退。
按以下步骤修复:
- 创建独立的Chrome运行临时目录并赋权:
mkdir -p /tmp/chrome-runtime chmod 777 /tmp/chrome-runtime - 在Chrome启动参数中追加配置,强制使用该独立目录,避免默认目录权限不足:
option.add_argument("--user-data-dir=/tmp/chrome-runtime") option.add_argument("--disk-cache-dir=/tmp/chrome-runtime") - 如果你用systemd配置服务自启,不要使用
User=nobody这类无家目录的系统用户运行应用,直接换成你开发模式下跑通脚本的普通用户(比如你的main用户),从根源避免权限问题。
- 修复运行用户权限问题
- 修正ChromeDriver路径权限问题
你当前把ChromeDriver放在个人家目录下的/home/path/to/路径,如果生产环境运行用户没有该目录的执行权限,会出现ChromeDriver启动成功但无法拉起Chrome的问题。直接把ChromeDriver移到系统标准可执行目录并赋全局权限:
sudo mv /home/path/to/chromedriver /usr/bin/ sudo chmod +x /usr/bin/chromedriver同时把代码中Service的路径改成
/usr/bin/chromedriver即可。- 修正ChromeDriver路径权限问题
验证方式
改完配置后,不要直接挂到托管服务里跑,先切换到生产环境实际运行应用的用户,手动执行脚本验证:# 比如你生产环境用www-data用户跑Gunicorn,就执行下面命令 sudo -u www-data python3 pyfile.py手动执行无报错后,再启动生产托管服务,就不会再出现Chrome崩溃的报错。
内容的提问来源于stack exchange,提问作者dev-null
相关产品推荐
相关产品推荐

