Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

251
Views
¿Cómo ejecutar child_process.exec correctamente en una solicitud ajax?

Hay un servidor al que tengo acceso, pero no tengo propiedad. Sirve una aplicación node js / express en un puerto predeterminado 3000. Hay varios scripts, que generalmente se ejecutan manualmente desde la terminal o mediante un trabajo cron. Lo que quiero hacer es tener un botón en el lado del cliente y hacer una solicitud ajax a una determinada ruta y ejecutar un comando de nodo js con argumentos en línea. Por ejemplo:

node script.js 123

Todas las rutas están configuradas y funcionando. Tengo un archivo CliController que maneja solicitudes y tiene que ejecutar el comando anterior. Actualmente estoy usando el siguiente código:

 cp.exec(`node script.js ${ip}`, function (err, stdout, stderr) { if (err) { console.log(err); } console.log(stdout); console.log(stderr); });

El archivo script.js está en la carpeta raíz del proyecto, pero el proyecto en sí se creó con express-generator y se sirve con el comando node bin/www . Hay un servicio/proceso en el servidor que ejecuta nodemon para reiniciar este proyecto si también falla. Por lo tanto, no tengo acceso a la salida de ese proceso en particular.

Si ejecuto el comando anterior en la terminal (desde la carpeta raíz del proyecto, para ser precisos), funciona bien y veo el resultado del script. Pero si presiono el botón en la página web para realizar una solicitud, estoy bastante seguro de que el script no se ejecuta, porque tiene que actualizar la base de datos y no veo ningún cambio. También traté de usar child_process.spawn y child_process.fork y no pude hacerlo funcionar.

También traté de matar a nodemon y rápidamente volví a iniciar el proyecto en la salida de la consola de visualización. Si hago esto, todo funciona.

Qué estoy haciendo mal ?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

El proceso invocado puede estar en un estado de bloqueo, por lo tanto, el script principal simplemente está esperando que el proceso secundario finalice o devuelva algo.

Podemos evitar este comportamiento directamente en el comando de shell, agregando & (operador de control de ampersand) al final.

Esto hace que un comando se ejecute en segundo plano. (Aviso, aún puede controlar el proceso de los niños usando las señales PID y POSIX , este es otro tema , pero muy relacionado y puede que lo encuentre muy útil muy pronto).

También tenga en cuenta que matar/detener el script principal también matará a los hijos. Esto se puede evitar usando nohup .

Esto no está vinculado a JavaScript o node.js, sino a bash , y se puede usar con cualquier cosa en el shell.

 cp.exec(`node script.js ${ip} &`, function (err, stdout, stderr) { if (err) { console.log(err); } console.log(stdout); console.log(stderr); });

bash manual de referencia

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!