为什么当我在 cron 中启动时 WebKit 不工作,但当我在终端中启动时 WebKit 工作?
Why isn't WebKit working when I launch in cron but works when I launch in terminal?
我将在 Ubuntu 18.04 的 VPS 上的 WebKit、Firefox 和 Chromium 上启动一个 playwright
脚本。在我的 VPS 上使用绝对路径,如果我像这样 cd /home/me/desktop/myCode && /usr/bin/npm run webkit > /home/me/desktop/errors.log 2>&1
在终端中输入它,所有三个都会启动并正常运行。这让我觉得我已经从这里正确安装了所有依赖项: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 中的一些代码,以防传递给 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,
args: ["--no-sandbox", "--disable-setuid-sandbox"],
});
}
};
您当前的 PATH
似乎无法使用 /sbin
。通过添加以下内容,应该可以将 Bash 用作 cron 作业的 shell:
SHELL=/bin/bash
在顶部的 crontab 文件中配置所有需要的环境变量。
这里的核心问题是 Playwright v1.3.0 依赖 ldconfig
在 PATH
.
中可用
在cronjob环境中,PATH默认为PATH=/usr/bin:/bin
,不包括通常在/sbin/ldconfig
.
的ldconfig
简单的解决方法:
- 为 cronjob 添加
PATH=/usr/bin:/bin:/sbin
前缀
- 降级到 v1.2.1
我提交了 https://github.com/microsoft/playwright/issues/3397 来跟踪这个;
我们将作为 v1.3.1
.
的一部分发布修复程序
抱歉给您带来不便!
我将在 Ubuntu 18.04 的 VPS 上的 WebKit、Firefox 和 Chromium 上启动一个 playwright
脚本。在我的 VPS 上使用绝对路径,如果我像这样 cd /home/me/desktop/myCode && /usr/bin/npm run webkit > /home/me/desktop/errors.log 2>&1
在终端中输入它,所有三个都会启动并正常运行。这让我觉得我已经从这里正确安装了所有依赖项: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 中的一些代码,以防传递给 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,
args: ["--no-sandbox", "--disable-setuid-sandbox"],
});
}
};
您当前的 PATH
似乎无法使用 /sbin
。通过添加以下内容,应该可以将 Bash 用作 cron 作业的 shell:
SHELL=/bin/bash
在顶部的 crontab 文件中配置所有需要的环境变量。
这里的核心问题是 Playwright v1.3.0 依赖 ldconfig
在 PATH
.
在cronjob环境中,PATH默认为PATH=/usr/bin:/bin
,不包括通常在/sbin/ldconfig
.
ldconfig
简单的解决方法:
- 为 cronjob 添加
PATH=/usr/bin:/bin:/sbin
前缀
- 降级到 v1.2.1
我提交了 https://github.com/microsoft/playwright/issues/3397 来跟踪这个;
我们将作为 v1.3.1
.
抱歉给您带来不便!