#node.js #exec #stdout #child-process
#node.js #exec #стандартный вывод #дочерний процесс
Вопрос:
У меня есть массив скрипта, который содержит команду другого скрипта.
[
'node controllers/script_one/import.js main init',
'node controllers/script_two/import.js main init'
]
Я передал приведенный выше массив в нижеприведенную функцию, чтобы запускать команды одну за другой.
async function exec_commands(commands,index = 0)
{
let command = commands.shift();
exec(command, (error, stdout, stderr) => {
if (error)
{
log.error("*****************************************************");
log.error("error Occured in command:");
log.error(error);
log.error("*****************************************************");
}
if(stdout)
{
log.info("*****************************************************");
log.info("shell Logs:");
log.info(stdout);
log.info("*****************************************************");
}
if(stderr)
{
log.info("*****************************************************");
log.info("shell:");
log.info(stderr);
log.info("*****************************************************");
}
index ;
if(commands.length)
{
log.info("Executing Next Command From Array, Loop Index:" index);
exec_commands(commands,index)
}
else
{
process.exit(0);
}
});
}
Теперь эта функция находится в другом скрипте main_script.js .
после выполнения команды node main_script.js
обе команды выполняются одна за другой, но 2-я команда занимает слишком много времени из-за ее внутренних процессов, она выдает ошибку ниже на терминале.
packet_write_wait: Connection to <IP ADDRESS> port 22: Broken pipe
потому что дочерний процесс ничего не возвращает, пока не завершит свои процессы.
Итак, как мы можем непрерывно печатать журналы в функции exec_commands во время выполнения дочерних команд?