Ubuntu服务器Celery运行Selenium时DevToolsActivePort文件不存在错误
解决Celery终止Selenium任务后Chrome无法重启的问题
1. 清理Chrome临时残留文件
虽然ps -ef | grep chrome找不到进程,但Chrome的临时数据目录可能未被彻底清理,这会导致DevToolsActivePort文件残留。
- 手动清理:执行命令删除/tmp下的Chrome临时目录:
rm -rf /tmp/.org.chromium.Chromium.* /tmp/chrome_* - 代码中自动清理:在初始化Chrome前添加清理逻辑(Python示例):
import shutil import os # 固定专属目录,每次启动前清空 chrome_profile_dir = "/tmp/chrome_task_profile" if os.path.exists(chrome_profile_dir): shutil.rmtree(chrome_profile_dir) os.makedirs(chrome_profile_dir, exist_ok=True) chrome_options.add_argument(f'--user-data-dir={chrome_profile_dir}')
2. 指定固定调试端口与用户数据目录
给Chrome显式指定调试端口和专属数据目录,避免默认临时目录的残留问题:
chrome_options.add_argument('--remote-debugging-port=9222') # 固定调试端口 chrome_options.add_argument('--user-data-dir=/tmp/chrome_fixed_profile') # 固定数据目录
3. 确保Celery任务终止时正确关闭Chrome
手动终止任务时,Chrome进程可能未被正常关闭,需在任务中添加可靠的清理逻辑:
- 使用
try-finally保证driver.quit()执行:from celery import Celery from selenium import webdriver app = Celery('tasks', broker='redis://localhost:6379/0') @app.task def selenium_task(): driver = None try: chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--headless') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') driver = webdriver.Chrome(options=chrome_options) # 执行你的任务逻辑 finally: if driver: driver.quit() # 无论任务成功/失败/被终止,都关闭Chrome - 捕获Celery终止信号:注册信号处理函数,在收到
SIGTERM/SIGINT时关闭Chrome:import signal def handle_termination(signum, frame): if 'driver' in locals() and driver is not None: driver.quit() signal.signal(signal.SIGTERM, handle_termination) signal.signal(signal.SIGINT, handle_termination)
4. 清理Chromedriver残留进程
有时Chrome主进程已退出,但Chromedriver进程可能残留,执行以下命令查找并杀死:
ps -ef | grep chromedriver | grep -v grep | awk '{print $2}' | xargs kill -9
或者结合Celery Worker的进程ID,清理其所有子进程:
# 先获取Celery Worker的PID CELERY_WORKER_PID=$(ps -ef | grep celery | grep worker | grep -v grep | awk '{print $2}') # 杀死该Worker的所有子进程 pstree -p $CELERY_WORKER_PID | grep -oP '\(\K\d+\)' | xargs kill -9
5. 调整系统资源限制
Ubuntu默认的资源限制可能导致问题,尝试:
- 增大文件句柄限制:编辑
/etc/security/limits.conf,添加:
重启系统后生效,或临时生效:* soft nofile 65535 * hard nofile 65535ulimit -n 65535 - 扩容临时文件系统(若
/tmp为tmpfs且空间不足):mount -o remount,size=4G /tmp
内容的提问来源于stack exchange,提问作者Ayush Sinha
相关产品推荐
相关产品推荐

