为什么在cron中启动时WebKit无法工作,而在终端中启动时,为什么WebKit无法工作?

问题描述

我正在使用Ubuntu 18.04的VPS在WebKit,Firefox和Chromium上启动playwright脚本。如果我像这样cd /home/me/desktop/myCode && /usr/bin/npm run webkit > /home/me/desktop/errors.log 2>&1在终端中键入,则在VPS上使用绝对路径,这三个命令都会启动并正常运行。这使我认为我已经从这里正确安装了所有依赖项:https://github.com/microsoft/playwright/blob/master/docs/docker/Dockerfile.bionic

但是,当我通过cron使用完全相同的脚本时,Firefox和Chromium会启动并正常运行,但Webkit版本会启动(它会在启动WebKit之前发出异步请求,并且会发生这种情况),但是当WebKit尝试启动时,它将失败整个程序。 cron脚本如下所示:

8 14 * * * cd /home/me/desktop/myCode && /usr/bin/npm run webkit > /home/me/desktop/errors.log 2>&1

错误看起来像这样:

events.js:292 
      throw er; // Unhandled 'error' event
      ^

Error: spawn ldconfig ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:267:19)
    at onErrorNT (internal/child_process.js:469:16)
    at processTicksAndRejections (internal/process/task_queues.js:84:21)
Emitted 'error' event on ChildProcess instance at:
    at Process.ChildProcess._handle.onexit (internal/child_process.js:273:12)
    at onErrorNT (internal/child_process.js:469:16)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  errno: 'ENOENT',code: 'ENOENT',syscall: 'spawn ldconfig',path: 'ldconfig',spawnargs: [ '-p' ]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! myCode@1.0.0 webkit: `cd lib && node runWebkit.js`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the myCode@1.0.0 webkit script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

Typescript中有一些代码,以防将args传递到webkit:

export const getBrowser = async ({
  headless,browserName,}: {
  headless: boolean;
  browserName: BrowserName;
}) => {
  switch (browserName) {
    case BrowserName.firefox:
      return await playwright.firefox.launch({
        headless: headless,args: ["--no-sandbox","--disable-setuid-sandbox"],});
    case BrowserName.webkit:
      return await playwright.webkit.launch({
        headless: headless,});
    case BrowserName.chromium:
      return await playwright.chromium.launch({
        headless: headless,});
  }
};

解决方法

此处的核心问题是Playwright v1.3.0依赖于session中的Object reference not set to an instance of an object.

在cronjob环境中,PATH默认为ldconfig,其中不包括通常位于PATH的{​​{1}}。

简便的解决方法:

  • 使用PATH=/usr/bin:/bin前缀cronjob
  • 降级到v1.2.1

我提交了https://github.com/microsoft/playwright/issues/3397进行跟踪; 我们将在ldconfig中发布该修补程序。

抱歉给您带来的不便!

,

看来/sbin在您当前的PATH中不可用。通过添加以下内容,应该有可能将Bash用作您的cron作业的外壳:

SHELL=/bin/bash

在顶部的crontab文件中,以配置所有必需的环境变量。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...