Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

247
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda