我有一个Django项目,使用Celery作为任务队列。这个任务是关于通过Selenium运行一个chromedriver并从一些URL中获取数据。就像这样:
@shared_task(bind=True)
def task_one(self):
options = Options()
options.add_argument("--start-maximized")
options.add_argument('--no-sandbox')
options.add_argument("--disable-dev-shm-usage")
driver = webdriver.Chrome(options=options)
wait = WebDriverWait(driver, 20)
action = ActionChains(driver)
driver.get('https://somewhere.com')
# do others
这个任务应该定期运行,因为我使用celery beat。
为了测试,我在两个终端上运行了celery worker和celery beat,一切似乎都没问题。(celery beat每20秒发送一次,worker运行Chrome并获取数据)
但是当我使用Supervisor时,工作进程出错,无法访问Chrome。(celery 节拍仍然工作得很好,每20秒发送一次,但问题出在工人身上)
celery 日志说:
'Message: session not created: Chrome failed to start: exited normally.
(chrome not reachable)
(The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
Stacktrace:
#0 0x562b0da106c3 <unknown>
#1 0x562b0d6e61e7 <unknown>
#2 0x562b0d719526 <unknown>
#3 0x562b0d71569c <unknown>
#4 0x562b0d75823a <unknown>
#5 0x562b0d74ee93 <unknown>
#6 0x562b0d721934 <unknown>
#7 0x562b0d72271e <unknown>
#8 0x562b0d9d5cc8 <unknown>
#9 0x562b0d9d9c00 <unknown>
#10 0x562b0d9e41ac <unknown>
#11 0x562b0d9da818 <unknown>
#12 0x562b0d9a728f <unknown>
#13 0x562b0d9fee98 <unknown>
#14 0x562b0d9ff069 <unknown>
#15 0x562b0da0f853 <unknown>
#16 0x7f0c29a97b43 <unknown>
'}
1条答案
按热度按时间fslejnso1#
我可以通过使用以下参数指定chromedriver路径来解决这个问题。
因为我在Ubuntu服务器上运行我的脚本,它看起来像这样: