2011-07-12 4 views
3

J'ai configuré un serveur Node.js, mais comment le lancer le mieux?Node.js, express et cluster

Ma stratégie pour l'instant est d'utiliser cluster (http://learnboost.github.com/cluster/). Cela fonctionne surtout très bien. J'ai la configuration suivante dans mon fichier app.js (créé avec express):

cluster(app) 
.use(cluster.reload()) 
.use(cluster.reload('views', {extensions: ['.js', '.ejs']})) 
.use(cluster.logger('logs')) 
.use(cluster.stats()) 
.use(cluster.repl('/Users/testuser/work/1test/test.sock')) 
.use(cluster.debug()) 
.use(cluster.pidfiles()) 
.use(cluster.cli()) 
.listen(3000); 

Il fonctionne sur mon Mac quand j'effectuer un test local. Je lance avec la commande

nohup node app.js & 

Mais quand je lance sur Linux et détachez du terminal maître meurt - les fils de travail travaillent encore. Sur Mac il fonctionne même quand je ferme le terminal.

Je lis qu'il pourrait être nécessaire de changer l'utilisateur, cela peut apparemment être fait en cluster avec: .set (« user », « rambo »)

Quelqu'un at-il une « meilleure pratique » pour lancer node.js en tant que "Daemon" avec cluster afin de pouvoir détacher le terminal?

Si je change d'utilisateur, à qui dois-je être connecté au démarrage? Dois-je utiliser un programme comme un écran pour se détacher du terminal sans tuer aucun processus?

Répondre

4

essayez pour toujours.

npm install -g forever 

https://github.com/indexzero/forever

+0

Merci beaucoup pour la réponse - j'ai compris que j'avais par erreur mis à jour vers le noeud 0.5.x. De plus, je n'ai pas pu me connecter à mysql, ce qui a provoqué un timeout après lequel le thread principal est mort - sans aucune erreur écrite dans le journal. Une fois que j'ai rétrogradé à 0.4.9 et testé l'accès à MySQL, j'étais sûr que je pouvais me connecter à 127.0.0.1 avec le cluster utilisateur donné qui fonctionnait très bien et stable. Je peux aussi me détacher du terminal. – Baxter

+0

On dirait que vous avez eu d'autres problèmes, mais la suggestion de @ idefine est bonne: forever est presque certainement une solution plus robuste que screen ou nohup. – mattbornski

0

On dirait que vous configurez également

.use(cluster.repl('/Users/testuser/work/1test/test.sock'))

qui n'existe probablement pas sur votre serveur linux.