Puppeteer无法从Crontab执行,但是在从终端手动执行时有效

时间:2019-06-04 01:05:22

标签: javascript node.js cron centos puppeteer

我想制作一个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 &

Cron:

bash ./public_html/test/shell_node.sh

我还尝试了使用exec()函数通过PHP执行脚本,

我到处都在寻找解决方案,但感觉就像我是有史以来第一个遇到此特定问题的人。这令人担忧,但我希望这里的人可以回答我。

感谢您的阅读和时间。

0 个答案:

没有答案