Démarrage automatique du serveur node.js au démarrage

87

Des experts de node.js peuvent-ils me dire comment je pourrais configurer node JS pour démarrer automatiquement un serveur au démarrage de ma machine? Je suis sous Windows

Bachalo
la source
5
stackoverflow.com/questions/20426652/ ... En quoi est-ce différent de la dernière fois que vous avez demandé?
WiredPrairie
1) Votre dernière question concerne Winblows, les réponses seront radicalement différentes selon les plateformes; 2) si sous Linux, le plus simple serait probablement d'utiliser le gestionnaire de processus de votre distribution (sysvinit, upstart, systemd)
TC1
Malheureusement sur Winblows, modifié pour refléter cela
Bachalo
2
Alors en quoi cette question est-elle différente de votre autre question?
hexacyanide
1
Il n'était pas satisfait de la seule réponse à la dernière question, alors il l'a posée à nouveau avec une prime en annexe.
Nahn

Réponses:

169

Ce n'est pas du tout quelque chose à configurer dans node.js, c'est purement la responsabilité du système d'exploitation (Windows dans votre cas). Le moyen le plus fiable d'y parvenir consiste à utiliser un service Windows.

Il y a ce module super simple qui installe un script de nœud en tant que service Windows, il s'appelle node-windows ( npm , github , documentation ). J'ai déjà utilisé et travaillé comme un charme.

var Service = require('node-windows').Service;

// Create a new service object
var svc = new Service({
  name:'Hello World',
  description: 'The nodejs.org example web server.',
  script: 'C:\\path\\to\\helloworld.js'
});

// Listen for the "install" event, which indicates the
// process is available as a service.
svc.on('install',function(){
  svc.start();
});

svc.install();

ps

J'ai trouvé la chose si utile que j'ai construit un wrapper encore plus facile à utiliser ( npm , github ).

L'installer:

npm install -g qckwinsvc

Installation de votre service:

> qckwinsvc
prompt: Service name: [name for your service]
prompt: Service description: [description for it]
prompt: Node script path: [path of your node script]
Service installed

Désinstaller votre service:

> qckwinsvc --uninstall
prompt: Service name: [name of your service]
prompt: Node script path: [path of your node script]
Service stopped
Service uninstalled
talles
la source
J'ai eu une erreur, mais cela a fonctionné avecnpm install qckwinsvc -g
Adam Gerthel
1
"qckwinsvc" est génial. Merci pour le conseil.
NLV
Échoue lors de la victoire 10 pro. Observateur d'événements: "Le service node-expjs-dev s'est arrêté de manière inattendue."
adi518
1
Hmm, comment puis-je déboguer mon application sans invite? Je sais que node-inspector pourrait aider, mais le débogage avec CMD semble plus intuitif.
adi518
2
J'ai essayé d'installer une application node express en tant que service, et elle est en cours d'exécution (je reçois la sortie des appels console.log dans le fichier * .out.log), mais lorsque j'essaye d'obtenir une réponse du serveur via mon navigateur Web , Je viens de récupérer une 404.
sanderd17
91

Si vous utilisez Linux, macOS ou Windows, pm2 est votre ami. C'est un gestionnaire de processus qui gère très bien les clusters.

Vous l'installez:

npm install -g pm2

Démarrez un cluster de, par exemple, 3 processus:

 pm2 start app.js -i 3

Et make pm2 les démarre au démarrage:

 pm2 startup

Il a une API, voire une interface moniteur :

IMPRESSIONNANT

Allez sur github et lisez les instructions . C'est facile à utiliser et très pratique. La meilleure chose depuis toujours .

blé dur
la source
2
malheureusement sur Windows 8
Bachalo
3
Monsieur, cette réponse mérite plus de votes positifs. Merci. Je veux aussi dire qu'il pm2 startupfaut l'un de ces paramètres de plate-forme <ubuntu|centos|gentoo|systemd>
:,
3
Le paramètre @Deerloper n'est pas nécessaire. De leur page officielle: $ pm2 startup # auto-detect platform $ pm2 startup [platform] # render startup-script for a specific platform, the [platform] could be one of: # ubuntu|centos|redhat|gentoo|systemd|darwin|amazon
vorg
1
C'est incroyable et mérite d'être la meilleure réponse ainsi que d'avoir plus de votes. Merci pour cela!
ILikeTurtles
1
@baptx Si vous êtes d'accord avec le systemd UX, le principal attrait de pm2 c'est qu'il est plus portable: distributions non basées sur systemd, macOS et Windows.
durum
31

Si je ne me trompe pas, vous pouvez démarrer votre application en utilisant la ligne de commande et donc également en utilisant un fichier batch. Dans ce cas, il n'est pas très difficile de le démarrer avec la connexion Windows.

Vous créez simplement un fichier de commandes avec le contenu suivant:

node C:\myapp.js

et enregistrez-le avec l'extension .bat. Ici myapp.js est votre application, qui dans cet exemple se trouve dans le lecteur C: (spécifiez le chemin).

Maintenant, vous pouvez simplement jeter le fichier de commandes dans votre dossier de démarrage qui se trouve dans C: \ Users \% username% \ AppData \ Roaming \ Microsoft \ Windows \ Start Menu \ Programs \ Startup

Ouvrez-le simplement en utilisant% appdata% dans la boîte de dialogue d'exécution et recherchez> Itinérance> Microsoft> Windows> Menu Démarrer> Programmes> Démarrage

Le fichier de commandes sera exécuté au moment de la connexion et démarrera votre application de nœud à partir de cmd.

Chetan Bhasin
la source
2
Cela fonctionne, mais c'est la voie du pauvre. La réponse des talles ci-dessous est meilleure. Installez-le en tant que service.
MindJuice
7
@MindJuice Je suis d'accord, même si c'est juste une solution facile, j'ai donc pensé que cela valait la peine d'être mentionné.
Chetan Bhasin
11
Mon application doit fonctionner à la fois sous Linux et Windows, donc cette solution fonctionne mieux pour moi car elle ne m'oblige pas à exiger un package spécifique à Windows dans mon application. Ce n'est pas parce qu'une solution est simple qu'elle est mauvaise.
Ryan Higgins le
En fait, cela ne fonctionne que si vous vous connectez à la machine. Mais, à des fins de mise à l'échelle / CI (environnement de production), cela ne fonctionne pas.
João Bruno Abou Hatem de Liz
4

Cela peut facilement être fait manuellement avec le planificateur de tâches Windows.

  • Tout d'abord, installez pour toujours .
  • Ensuite, créez un fichier de commandes contenant les éléments suivants:

    cd C:\path\to\project\root
    call C:\Users\Username\AppData\Roaming\npm\forever.cmd start server.js
    exit 0
    
  • Enfin, créez une tâche planifiée qui s'exécute lorsque vous vous connectez. Cette tâche doit appeler le fichier de commandes.

Robereng
la source
3

Je recommanderais d'installer votre application node.js en tant que service Windows, puis de configurer le service pour qu'il s'exécute au démarrage. Cela devrait faciliter un peu le contrôle de l'action de démarrage à l'aide du composant logiciel enfichable Services Windows plutôt que d'avoir à ajouter ou supprimer des fichiers de commandes dans le dossier Démarrage.

Une autre question liée au service dans Stackoverflow a fourni quelques (apparemment) très bonnes options. Découvrez Comment installer node.js en tant que service Windows . node-windows me semble vraiment prometteur. En passant, j'ai utilisé des outils similaires pour les applications Java qui devaient fonctionner en tant que services. Cela m'a rendu la vie beaucoup plus facile. J'espère que cela t'aides.

MichaelMilom
la source
0

Voici une autre solution que j'ai écrite en C # pour le serveur de nœud natif de démarrage automatique ou le serveur pm2 sous Windows.

Yar
la source
0

Je sais qu'il existe plusieurs façons d'y parvenir selon les solutions partagées ci-dessus. Je ne les ai pas tous essayés, mais certains services tiers manquent de clarté sur ce que sont toutes les tâches exécutées en arrière-plan. J'ai réalisé cela grâce à un script PowerShell similaire à celui mentionné en tant que fichier batch Windows. Je l'ai programmé à l'aide du planificateur de tâches Windows pour qu'il s'exécute toutes les minutes. Jusqu'à présent, cela a été assez efficace et transparent. L'avantage que j'ai ici est que je vérifie explicitement le processus avant de le redémarrer. Cela n'entraînerait pas beaucoup de surcharge pour le processeur sur le serveur. De plus, vous n'avez pas à placer explicitement le fichier dans les dossiers de démarrage.

function CheckNodeService ()
{

$node = Get-Process node -ErrorAction SilentlyContinue

if($node)
{
    echo 'Node Running'
}
else
{
    echo 'Node not Running'
    Start-Process "C:\Program Files\nodejs\node.exe" -ArgumentList "app.js" -WorkingDirectory "E:\MyApplication"
    echo 'Node started'

}
}

CheckNodeService
Sachin Hayatnagarkar
la source
-2

Copié directement à partir de cette réponse :

Vous pouvez écrire un script dans n'importe quelle langue que vous souhaitez automatiser (même en utilisant nodejs), puis simplement installer un raccourci vers ce script dans le dossier% appdata% \ Microsoft \ Windows \ Start Menu \ Programs \ Startup de l'utilisateur

argile
la source
4
Dans ce cas, marquez la question comme un doublon au lieu de copier / coller la réponse ici.
OlivierH