Собственно вопрос, даже не знаю к кому, то ли к Nodерам то ли к PHPникам
Чувак написал небольшой сервис на nodejs с кукловодом.
const puppeteer = require('puppeteer-extra');
var argv = process.argv
var fs = require('fs');
let file_map = argv[2];
let file_list = JSON.parse(fs.readFileSync(file_map, 'utf8'));
async function main() {
let browser = await puppeteer.launch({
headless: true,
args: [
'--window-size=1200,1400',
'--window-position=000,000',
'--no-sandbox',
'--disable-dev-shm-usage',
'--disable-web-security',
'--disable-features=IsolateOrigins',
'--disable-site-isolation-trials'
]
})
for (const temp_file of file_list) {
console.log('file://'+temp_file);
let page = await browser.newPage();
await page.goto('file://'+temp_file);
let body_processed = await page.evaluate(() => document.documentElement.innerHTML);
await page.close();
fs.writeFileSync(temp_file,'<html>'+body_processed+'</html>')
}
await browser.close();
}
main().catch((e) => {
throw e
})
Мне надо из консоли в PHP стартануть его,
и подождать пока он завершится.
Не чего получать от него не надо, но важно дождаться окончания его работы.
Код запуска не хитер:
$escaped_command = escapeshellcmd('/usr/bin/nodejs /home/master/tester/main.js '.$file_map);
shell_exec($escaped_command); // exec($escaped_command); тоже пробовал
Если запускать руками то что в
$escaped_command работает на ура.
Если запускаю из консольного PHP скрипт завершается через секунду. (хотя время работы node где то сек 40 )
Я с начало подумал что shell_exec или exec просто кидает процесс в фон и не ждет ответа, но свершись документацией понял что это не так.
Проверил документацию сделав
shell_exec('ping google.com')
Действительно shell_exec ждет когда ping завершится.
Собственно не очень понятно как его запустить, и почему node сразу завершает процесс...
Какие идеи?
UPDATE:
Сделал
dump(shell_exec($escaped_command));
Вижу console.log который нода выводит но завершается слишком быстро.