Puppeteer 无法从 Crontab 执行,但在从终端手动执行时可以工作

问题描述 投票:0回答:1

我想创建一个 Node.js Puppeteer cronjob,但是 Puppeteer 仅在从 cronjob 执行时才会中断且不会出现任何错误。

我尝试的脚本在从根文件夹手动执行(通过终端)时工作得很好,但是每当我尝试将其作为 cronjob 执行并且执行停止时,似乎就会出现问题。

我制作了一些console.logs来帮助我定位问题,发现脚本的执行在

const browser = await puppeteer.launch()
处中断。
之后的任何内容都不会执行。

请参阅下面的代码以了解我在说什么:

'use strict'

console.log('Node script starts!');

const puppeteer = require('puppeteer');

(async () => {

    console.log('test 1');
    //Code stops here

    const browser = await puppeteer.launch();
    console.log('test 2');

    const page = await browser.newPage();
    await page.goto('https://example.com');
    await page.screenshot({
        path: '0_ScreenShot.png'
    });

    await browser.close();
})();

因此通过 SSH 手动执行上述代码:

[site@server ~]$ cd public_html/test/

然后:

[site@server test]$ nohup node ctest.js > out.log &

我的

out.log
文件输出以下内容并在
/test/0_ScreenShot.png
下保存屏幕截图,这是预期的结果:

Node script starts!
test 1
test 2

但由于某种原因,这就是我在这里的原因,通过 cronjob 执行同一个文件不起作用,

out.log
仅打印以下内容:

Node script starts!
test 1

有问题的 cronjob 从 cPanel 设置为:

./bin/node ./public_html/test/ctest.js > ./public_html/test/out.log &

我认为这是一个路径问题,并尝试通过将 Puppeteer 初始化更改为此来尽可能绝对,但没有运气:

const browser = await puppeteer.launch({
        executablePath: '/home/site/public_html/test/node_modules/puppeteer/.local-chromium/linux-654752/chrome-linux/chrome'
    });

我什至下载了一个新的 Chromium 并使用了它,但仍然没有任何结果:

const browser = await puppeteer.launch({
        executablePath: '/home/site/public_html/test/node_modules/chromium/lib/chromium/chrome-linux/chrome'
    });

我使用 bash 脚本 (

shell_node.sh
) 来执行节点脚本,但同样的问题仍然存在:

#!/usr/bin/env sh
nohup ./bin/node ./public_html/test/ctest.js > ./public_html/test/out.log &

克朗:

bash ./public_html/test/shell_node.sh

我还尝试使用

exec()
函数通过 PHP 执行脚本,但仍然没有任何结果。

我到处寻找解决方案,但感觉我是第一个遇到这个特定问题的人..这令人担忧,但我希望这里有人能回答我。

感谢您的阅读和您的时间。

javascript node.js cron centos puppeteer
1个回答
0
投票

感谢 Zach ['--no-sandbox', '--disable-setuid-sandbox'] 的出色工作!在发现这一点之前,我整整一个星期都在用头撞桌子!基本问题都是“在线”工作,但不能从调度程序中工作,既不能真正调度并注销,也不能在调度程序中选择“运行”。谢谢扎克!

© www.soinside.com 2019 - 2024. All rights reserved.