8
votes

Pourquoi PM2 ne lance pas mon processus Node?

Auparavant, j'ai réussi à implémenter PM2, mais pas actuellement.

Mon application de nœud fonctionne très bien si je la lance manuellement, mais rien de ce que je fais ne la fait fonctionner via PM2, même si PM2 semble la démarrer . Voici ce que je veux dire:

Si j'exécute pm2 start server / index.js, la réponse dans le terminal se lit comme suit:

module.exports = {
  apps : [{
    name: 'sm_api',
    script: 'server/index.js',
    "log_date_format"  : "YYYY-MM-DD HH:mm Z",

    // Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
    args: 'one two',
    instances: 'max',
    error_file : "C:\\pm2_system\\.pm2\\logs\\sm-api-error",
    out_file: "C:\\pm2_system\\.pm2\\logs\\sm-api-out",
    autorestart: true,
    watch: "../",
    max_restarts: 10,
    max_memory_restart: '1G',
    env: {
      NODE_ENV: 'development'
    },
    env_production: {
      NODE_ENV: 'production'
    },
    exec_mode: 'cluster'
  }],
};

Ensuite, le terminal s'imprime un tableau avec des informations sur l'application. Cela n'a pas l'air assez collé ici, donc je vais le lister:

[PM2] Spawning PM2 daemon with pm2_home=c:\pm2_system\.pm2
[PM2] PM2 Successfully daemonized
[PM2][WARN] <app name> doesn't exist

Il semble que le processus de nœud devrait être en cours d'exécution. Mais si j'entre immédiatement liste pm2 , aucun processus ne s'exécute. Si j'entre pm2 stop index, il dit:

$ pm2 start ecosystem.config.js
[PM2] Spawning PM2 daemon with pm2_home=c:\pm2_system\.pm2
[PM2] PM2 Successfully daemonized
[PM2][WARN] Applications sm_api not running, starting...
[PM2] App [sm_api] launched (2 instances)

Alternativement, si j'essaye d'utiliser écosystème.config.js dans les commandes, j'obtiens des résultats similaires. Voici les commandes essayées:

pm2 reload ecosystem.config.js
pm2 start ecosystem.config.js

Exemple de résultat de l'exécution de ces commandes:

$ pm2 stop index
[PM2] Spawning PM2 daemon with pm2_home=c:\pm2_system\.pm2
[PM2] PM2 Successfully daemonized
[PM2][ERROR] Process index not found

Et la CLI imprime un tableau montrant deux instances avec le statut «en ligne» et le visionnage «activé». Et pourtant, l'application ne fonctionne pas (lorsqu'elle est testée à partir du navigateur) et "pm2 show" renvoie:

App Name: index
id: 0
version: 1.0.0
mode: fork
pid: 8984
status: online
restart: 0
update 0s
cpu: 0% 
mem: 26.0 MB
user: ME
watching: disabled

Des indices sur ce qui a mal tourné avec mon pm2?

Voici mon fichier écosystème.config.js:

$ pm2 start server/index.js
[PM2] Spawning PM2 daemon with pm2_home=c:\pm2_system\.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting D:\Program Files\nodeApps\service-management-api\server\index.js in fork_mode (1 instance)
[PM2] Done.* 

Exécution dans l'environnement Windows Server 2012. Notez que j'ai l'intention d'ajouter le package pm2-windows-service après que pm2 fonctionne.


20 commentaires

Avez-vous vérifié C: \\ pm2_system \\. Pm2 \\ ​​logs \\ sm-api-error?


@pzaenger - oui j'ai regardé. Aucune erreur enregistrée. Merci pour l'aide.


J'ai enregistré ce lien il y a quelque temps, github.com/jon-hall/pm2-windows- service ... Je ne suis pas sûr que quelque chose puisse vous aider.


Merci @CodyG. J'ajouterai pm2-windows-service une fois que pm2 sera installé avec succès. Actuellement pas encore installé. Bon à savoir sur les dépendances .net cependant.


Toujours pas de clarté sur cette question. La contribution est profondément appréciée.


Quelle version de PM2 utilisez-vous?


Bonjour @Unitech. v 3.2.7 Merci!


@CodyG. avez-vous eu des problèmes comme celui-ci en cours d'exécution de pm2 dans Windows? Je suppose que vous avez partagé un lien vers le service pm2-windows que vous admininster pm2 dans un environnement de serveur Windows?


HA! J'ai essayé de le configurer il y a longtemps mais en vain sur win7 / win 2008r2. Exécutez-vous tout en tant qu '"administrateur"? Je suis celui qui a favorisé cette question juste au cas où j'essaierais à nouveau. Je l'ai fait fonctionner sur Windows 7, mais sur un serveur en tant que service, c'était une autre histoire.


Vous avez un dossier c: \ pm2_system \ .pm2 , non? Étant donné que le dossier est sur la racine C: \, je pense que vous rencontrez de nombreux problèmes de sécurité, alors assurez-vous que c'est un accès complet pour tout le monde peut-être?


@CodyG., Merci pour votre contribution. Oui, tout exécuter en tant qu'administrateur. Oui, j'ai le dossier c: \ pm2_system \ .pm2. Tout cela fonctionne correctement sur nos serveurs QA. Certains paramètres de nos serveurs Prod empêchent le PM2 de fonctionner. Même les journaux ne sont d'aucune utilité.


Peut-être que l'application plante rapidement. Pouvez-vous simplifier un peu votre configuration. Désactivez le mode "cluster". Désactivez "max_memory_restart", désactivez le visionnage. Voyez si vous pouvez obtenir uniquement le serveur / index.js de base fonctionnant avec pm2. Vous dépassez peut-être la limite de 1G en raison de la surveillance des fichiers.


Merci @adamrights. C'était une excellente suggestion, mais malheureusement quand je l'ai essayé, le même résultat.


@adamrights même si cela n'a pas résolu le problème, vous m'avez inspiré de regarder le gestionnaire de tâches tout en lançant PM2. À ma grande surprise, le processeur a grimpé à 100% au moment même où le processus semble planter. Remarque: comme je peux exécuter mon application manuellement (sans PM2), je suis convaincu que ce n'est pas un problème avec mon code. C'est ma configuration de PM2 ou quelque chose sur la configuration du système d'exploitation.


@mike_butak Je verrai si quelqu'un au travail utilisant node.js avec Windows a des idées - j'ai beaucoup utilisé pm2, mais jamais avec Windows.


@adamrights MERCI


@adamrights juste pour info, ce problème a été résolu. Le PM2 v 3.2.5 récemment introduit introduit un bogue qui provoque le plantage de PM2 dans Windows. La solution était de revenir à 3.2.4. Problème ouvert sur github: github.com/Unitech/pm2/issues/4113 Merci pour votre contribution!


@CodyG. juste pour info, ce problème a été résolu. Le PM2 v 3.2.5 récemment introduit introduit un bogue qui provoque le plantage de PM2 dans Windows. La solution était de revenir à 3.2.4. Problème ouvert sur github: github.com/Unitech/pm2/issues/4113 Merci pour votre contribution!


@Unitech J'ai appris la cause de ce problème d'un autre utilisateur, sur github. Le PM2 v 3.2.5 récemment introduit introduit un bogue qui provoque le plantage de PM2 dans Windows. La solution était de revenir à 3.2.4. Problème ouvert sur github: github.com/Unitech/pm2/issues/4113 . Votre équipe inclut-elle des tests Windows avant les versions de version? Sinon, il serait bon de le savoir afin que nous puissions évaluer si PM2 est le bon gestionnaire de processus pour notre organisation. Je vous remercie!


@pzaenger juste pour info, ce problème a été résolu. Le PM2 v 3.2.5 récemment introduit introduit un bogue qui provoque le plantage de PM2 dans Windows. La solution était de revenir à 3.2.4. Problème ouvert sur github: github.com/Unitech/pm2/issues/4113 Merci pour votre contribution!


3 Réponses :


2
votes

D'accord, j'ai obtenu la réponse après avoir publié un problème sur la page des problèmes de pm2 github.

Partagez-le ici au cas où quelqu'un d'autre se trouverait dans cette situation:

https://github.com/Unitech/pm2/issues/4113

(Fondamentalement, pm2 3.2.5 a introduit un bogue qui cause ce problème dans Windows. Mon installation de développement était la 3.2.4. Le problème a été résolu en revenant à la version 3.2.4 en production. Processus simple, voir les instructions sur le lien ci-dessus.)


0 commentaires

4
votes

Pour contourner le problème, j'ai utilisé ce qui suit:

pm2 start --no-daemon app.js


1 commentaires

Ce n’est certainement pas une solution à long terme. Dès que le processus shell est terminé, le processus pm2 mourra.



0
votes

Juste une note pour ceux qui disent de l'exécuter en mode no-daemon , ( pm2 start --no-daemon ), vous devriez utiliser ce mode si vous essayez de diagnostiquer la raison pour laquelle, lorsque vous exécutez le démon, votre script échoue.

Presque invariablement, c'est parce que vous dites à PM2 de regarder un dossier dist ou similaire pendant sa construction, donc PM2 continue de redémarrer jusqu'à ce qu'il atteigne sa limite (car les fichiers sont régénérés à une vitesse assez rapide), puis affiche le " état d'erreur ".

L'exécution en no-daemon n'est absolument pas recommandée en production. Assurez-vous que PM2 s'exécute en tant que démon afin qu'il puisse redémarrer lui-même et qu'il puisse redémarrer vos processus en tant que processus lui-même. Si vous tuez vos sessions de terminal ou qu'elles sont automatiquement expirées sur votre hôte, vous constaterez rapidement que votre service meurt lorsque cela se produit.

Donc, en bref ... faites-le de la bonne manière et déterminez quel est le problème, plutôt que d'être paresseux et de transformer PM2 en un wrapper glorifié pour le binaire node .


0 commentaires