2011-12-23 24 views
14

Tengo un archivo JS que se ejecuta a través de node.js, por lo que normalmente abro una ventana de terminal y escribo algo así como node myfile.js y se ejecuta y se ejecuta todo el día; divertido.archivo js del nodo desencadenador

Luego cuando quiero reiniciarlo, pulso control-c y se cierra. Entonces puedo ejecutar el comando nuevamente.

Ahora lo que me gustaría hacer es poder hacer esto a través de una página web para que mis usuarios puedan ejecutar archivos JS específicos y también ser capaces de "reiniciarlos".

Así que dos preguntas sobre este:

  1. ¿Es posible, y si es así cómo puedo empezar?
  2. ¿Es seguro y, de no ser así, puede hacerse seguro?

Basado en swatkins response Es

he intentado esto y no tengo nada

$output = exec("node -v"); 
echo $output; 

Luego probé en mi máquina local y trabajó muy bien lo que le da?

también Todavía no estoy seguro acerca de la seguridad y la capacidad de detener un script en ejecución

+0

No, '$ output' se debe pasar como el segundo parámetro de la función exec:' exec ("node -v", $ output); print_r ($ output); ' – swatkins

Respuesta

16

Suponiendo que estés en el sistema operativo basado en Unix:

Puede ejecutar comandos de shell a través del exec() función:

// in php file 
// to start the script 
exec("node myscript.js &", $output); 

$output se convierte en una gran variedad de cada línea de salida, para que pueda ver lo que el identificador de proceso es. De allí tendría que utilizar ese proceso de identificación para matar el guión:

exec("kill " . $processid); 
+0

y ¿cómo podría detener ese script? y es seguro correr? también ¿cómo sé si se está ejecutando? – mcgrailm

+0

actualicé mi respuesta; necesitará obtener la identificación del proceso, por lo que al ejecutar 'myscript.js' en segundo plano (al agregar' & 'al comando), recibirá una identificación del proceso en la matriz de salida. Probablemente necesites hacer alguna manipulación de cadena para obtener la identificación real, pero luego la usas para matar el proceso. – swatkins

+0

this certain ejecuta el script pero no me da ningún resultado hasta que lo elimine y luego me da los datos que se escriben en console.log() – mcgrailm

2

que evitaría cualquier interacción directa con la cáscara. Probablemente sería el más seguro, para resolver de esta manera:

  • implementar algunas -script general "servicio", que pone en marcha el usuario de nodo aplicación y lo mantiene funcionando (algo así como https://github.com/isaacs/node-supervisor)
  • Que sea , entonces reinicia automáticamente los cambios de los archivos relevantes o una entrada de base de datos
  • Con el usuario activando un reinicio, agregue un indicador (marca de tiempo?) a la entrada de base de datos o archivo que es visto por el reinicio-script. Luego reiniciará node.js-app/script.
+3

¿Por qué no tendría interacción shell? ¿Qué pasa con la respuesta aceptada? –

Cuestiones relacionadas