SSH断开后Python+Selenium的Chromedriver无法启动问题求助
问题原因及解决办法
核心原因
你的问题核心是AppArmor权限限制:从syslog报错能明确看到,snap版本的chromium.chromedriver被禁止访问/proc/[pid]/mem文件。SSH会话内运行时,环境上下文可能绕过了部分AppArmor规则,但cron定时任务或退出SSH后的后台会话会严格触发该限制,直接导致chromedriver启动失败。
另外,cron的执行环境和SSH会话存在差异,缺失部分环境变量(如PATH等)也可能间接影响,但当前日志明确指向AppArmor的权限问题,所以优先解决这个核心矛盾。
解决步骤
方案1:调整AppArmor规则(针对snap版chromium)
- 找到snap.chromium.chromedriver的AppArmor配置文件,通常路径为:
/var/lib/snapd/apparmor/profiles/snap.chromium.chromedriver - 编辑该文件,添加一行允许访问/proc进程内存的规则:
/proc/*/mem r, - 重新加载AppArmor规则使修改生效:
sudo apparmor_parser -r /var/lib/snapd/apparmor/profiles/snap.chromium.chromedriver - 测试cron任务或后台运行脚本是否恢复正常
临时测试方案:如果只是验证问题根源,可以先禁用该AppArmor profile(不推荐长期使用):
sudo aa-disable snap.chromium.chromedriver
方案2:替换为APT安装的chromium(更稳定)
snap包的AppArmor限制通常更严格,换成APT源的chromium能从根源避免这类权限问题:
- 移除snap版chromium:
sudo snap remove chromium - 安装APT版chromium及对应chromedriver:
sudo apt update && sudo apt install chromium-browser chromium-chromedriver - 修改Python脚本中的webdriver路径,指向APT安装的chromedriver(默认路径为
/usr/lib/chromium-browser/chromedriver),或者让Selenium自动检测系统路径
方案3:完善cron的环境变量
确保cron任务拥有必要的环境变量,避免因路径或上下文缺失导致的附加问题:
编辑cron任务(执行crontab -e)时,先添加环境变量配置:
SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # 示例:每天凌晨1点执行脚本并记录日志 0 1 * * * /usr/bin/python3 /path/to/your/main.py >> /var/log/selenium_cron.log 2>&1
内容的提问来源于stack exchange,提问作者WhisperN
相关产品推荐
相关产品推荐

