Puppeteer не запускается из Crontab, но работает при выполнении вручную с терминала - PullRequest
1 голос
/ 04 июня 2019

Я хочу сделать cronjob Node.js Puppeteer, но 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

Я также пытался выполнить сценарий с помощью PHP с помощью функции exec(), ничего не вышло.

Я искал повсюду решение, но мне кажется, что я первый человек, который когда-либо сталкивался с этой конкретной проблемой ... что вызывает беспокойство, но я надеюсь, что кто-то отсюда может ответить мне.

Спасибо за ваше чтение и ваше время.

...