将Python Selenium Chromedriver作为systemd服务运行时遇启动异常求助
解决systemd启动Selenium ChromeDriver时的版本检测/进程崩溃问题
核心原因
systemd的运行环境和普通bash会话存在差异:默认缺少用户环境变量、无桌面上下文、权限限制,导致Chrome无法正常启动,进而被ChromeDriver判定为崩溃。
具体解决方案
1. 硬编码Chrome和ChromeDriver路径,避免依赖PATH
在你的Selenium代码中直接指定二进制文件路径,消除环境变量依赖:
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service options = Options() # 指定Chrome二进制路径 options.binary_location = "/usr/bin/google-chrome" # 指定ChromeDriver路径 service = Service(executable_path="/usr/bin/chromedriver") # 无桌面环境需添加以下参数 options.add_argument("--headless=new") options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") driver = webdriver.Chrome(service=service, options=options)
可通过
which google-chrome和which chromedriver确认实际路径
2. 配置systemd服务的环境与权限
编辑你的systemd服务文件(比如/etc/systemd/system/selenium-parser.service),添加必要的环境变量和用户上下文:
[Unit] Description=Selenium Chrome Parser Service After=network.target [Service] # 指定运行脚本的用户(和你bash会话用的用户一致) User=your-username Group=your-username # 设置工作目录为脚本所在路径 WorkingDirectory=/home/your-username/parser-scripts # 传递必要的环境变量,无桌面环境可跳过DISPLAY/XAUTHORITY Environment="DISPLAY=:0" Environment="XAUTHORITY=/home/your-username/.Xauthority" # 如需虚拟桌面,用xvfb-run包裹启动命令 ExecStart=/usr/bin/xvfb-run -a /usr/bin/python3 /home/your-username/parser-scripts/your-script.py # 重启策略 Restart=on-failure [Install] WantedBy=multi-user.target
修改后执行重载和重启:
sudo systemctl daemon-reload sudo systemctl restart selenium-parser.service
3. 验证Chrome的可执行性
切换到服务指定的用户,手动启动Chrome确认无报错:
su - your-username -c "/usr/bin/google-chrome --headless=new --no-sandbox --disable-dev-shm-usage --version"
如果报错,检查Chrome的依赖是否完整(比如缺失libnss3等库,需用apt install libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxrandr2 libgbm1 libgtk-3-0 libasound2补全)
4. 确认ChromeDriver与Chrome版本匹配
运行以下命令核对版本:
google-chrome --version chromedriver --version
两者主版本号必须一致(比如Chrome 119.x对应ChromeDriver 119.x),版本不匹配会直接导致启动失败。
内容的提问来源于stack exchange,提问作者Em1tao
相关产品推荐
相关产品推荐

