En Python Twisted, tienes el twistd
comando que te ayuda con una serie de cosas relacionadas con la ejecución de tu aplicación (demonizarla, por ejemplo).
¿Cómo demonizar un servidor node.js para que pueda ejecutarse incluso después de que se cierre la sesión actual?
Gracias por tu ayuda
Respuestas:
Siempre es la respuesta a tu pregunta.
Instalar en pc
$ curl https://npmjs.org/install.sh | sh $ npm install forever # Or to install as a terminal command everywhere: $ npm install -g forever
Uso
Usando Forever desde la línea de comando
Usando una instancia de Forever de Node.js
var forever = require('forever'); var child = new forever.Forever('your-filename.js', { max: 3, silent: true, args: [] }); child.on('exit', this.callback); child.start();
fuente
forever start server.js
a un script de inicio (por ejemplorc.local
), si desea que sobreviva a los reinicios.Si necesita que su proceso se demonice a sí mismo, sin depender para siempre, puede usar el módulo demonize .
Luego simplemente escriba su archivo de servidor como en el ejemplo:
var daemon = require("daemonize2").setup({ main: "app.js", name: "sampleapp", pidfile: "sampleapp.pid" }); switch (process.argv[2]) { case "start": daemon.start(); break; case "stop": daemon.stop(); break; default: console.log("Usage: [start|stop]"); }
Eso sí, es un enfoque de bajo nivel.
fuente
case 'restart': daemon.on('stopped', () => { daemon.start(); }); daemon.stop(); break;
Para iniciar un
systemd
demonio de administrador de servicios, escriba un archivo de servicio. Por ejemplo, cree un archivo/etc/systemd/system/myservice.service
.[Unit] Description=myservice-description After=network.target [Service] ExecStart=/opt/myservice-location/src/node/server.js --args=here Restart=always User=me Group=group Environment=PATH=/usr/bin:/usr/local/bin Environment=NODE_ENV=production WorkingDirectory=/opt/myservice-location [Install] WantedBy=multi-user.target
Recuerde actualizar el demonio del administrador de servicios después de cada cambio en el archivo myservice.service.
Luego, inicie el servicio en ejecución y habilite el servicio para que se inicie en el arranque.
fuente
ACTUALIZACIÓN : actualicé para incluir lo último de pm2:
para muchos casos de uso, utilizar un servicio systemd es la forma más sencilla y adecuada de gestionar un proceso de nodo. para aquellos que ejecutan numerosos procesos de nodo o microservicios de nodo de ejecución independiente en un solo entorno, pm2 es una herramienta con más funciones.
https://github.com/unitech/pm2
http://pm2.io
pm2 monit
o lista de procesos conpm2 list
pm2 logs
fuente
El enfoque más simple sería simplemente enviar el comando a un segundo plano.
Luego, puede finalizar el proceso en otro momento. Normalmente hago lo siguiente:
Nota : estoy ejecutando OS X.
fuente
/dev/null
debería incluirse en la solución completa?Puedes probar:
Me funciona en Mac y Linux.
La salida estará en el
./nohup.out
archivoPero todavía te recomiendo que uses
pm2
oforever
, porque se usan fácilmente para reiniciar, detener y registrar.fuente
Hay corredores de uso general más avanzados, como
monit
yrunit
.fuente
Para obtener información sobre la forma normal de demonizar en un sistema POSIX, puede buscar el método C.
No he visto suficientes métodos en la API de node.js para permitir que se haga en C a mano. Sin embargo, cuando usa child_process, puede hacer que node.js lo haga por usted:
http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options
Considero que esto es una posible pérdida de tiempo porque es muy probable que su sistema proporcione lo mismo.
Por ejemplo:
http://libslack.org/daemon/manpages/daemon.1.html
Si desea algo portátil (multiplataforma), las otras publicaciones ofrecen soluciones que podrían ser suficientes.
fuente