如何解决为什么在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文件中,以配置所有必需的环境变量。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。