退出EC2实例SSH连接后Chromedriver意外退出的问题求助
Ubuntu EC2实例后台运行Selenium脚本断开SSH后报错的解决方法
问题描述
我在Ubuntu EC2实例上运行一个带循环的Selenium脚本,期望实现后台持续运行,脚本代码如下:
from selenium import webdriver def play(): chrome_options = webdriver.ChromeOptions() chrome_options.add_argument("--headless") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("enable-automation") chrome_options.add_argument("--disable-infobars") chrome_options.add_argument("--disable-dev-shm-usage") try: driver = webdriver.Chrome(executable_path='/usr/bin/chromedriver', options=chrome_options) except Exception as e: with open(f'{os.getcwd()}/error_log.txt', 'a') as f: f.write(str(datetime.datetime.now())) f.write(str(e))
通过SSH连接实例时脚本运行正常,但断开SSH后出现如下错误:
Message: Service /usr/bin/chromedriver unexpectedly exited. Status code was: 1
启动脚本使用的命令为:nohup python3 script.py &
解决方法
1. 补全脚本依赖并配置环境变量
脚本中缺少os和datetime模块的导入,且断开SSH后环境变量可能丢失,需在脚本开头添加以下内容:
import os import datetime # 配置必要环境变量,确保无头模式运行稳定 os.environ['DISPLAY'] = ':0' os.environ['PATH'] = '/usr/bin:' + os.environ.get('PATH', '')
2. 改用screen/tmux替代nohup
nohup无法完全隔离SSH会话资源,使用screen能更可靠地维持后台进程:
- 安装screen:
sudo apt update && sudo apt install screen - 创建新会话:
screen -S selenium_run - 在会话内启动脚本:
python3 script.py - 按
Ctrl+A+D脱离会话,此时断开SSH脚本仍会持续运行 - 重新连接后恢复会话:
screen -r selenium_run
3. 校验chromedriver与Chrome版本兼容性
版本不匹配是导致chromedriver意外退出的常见原因:
- 查看Chrome版本:
google-chrome --version - 下载对应版本的chromedriver替换
/usr/bin/chromedriver,或通过包管理器安装匹配版本。
4. 增强错误日志排查
修改脚本的异常捕获逻辑,记录更多环境细节,便于定位问题:
except Exception as e: log_path = os.path.join(os.getcwd(), 'error_log.txt') with open(log_path, 'a') as f: f.write(f"\n[{datetime.datetime.now()}] 错误信息: {str(e)}\n") f.write(f"当前PATH: {os.environ.get('PATH', '未获取到')}\n") f.write(f"当前DISPLAY: {os.environ.get('DISPLAY', '未设置')}\n")
内容的提问来源于stack exchange,提问作者ADL
相关产品推荐
相关产品推荐

