Lancer NodeJS comme un service avec Upstart

Il est facile de lancer un serveur web, par exemple, avec NodeJS et une de ces commandes :

  1. La première lance le script web.js en console. Dès que la console est coupée, le script l’est aussi. Ballot.
  2. La seconde permet de garder le script  web.js en arrière-plan, mais si le script cherche à écrire quelque chose sur stdout et que la console est coupée, le script va crasher. Et oui stdout n’existe plus.
  3. La dernière solution est la meilleure des 3 mais en cas de crash ou de redémarrage du serveur, on est obligé de relancer le script à la main.

Mais alors, comment je fais ? Je reste au cul du serveur, à guetter sur htop si mon script disparait pour pouvoir garder un service continu ?

Et non, il y a Upstart !

Upstart est un outil basé sur les évènements et permet de lancer des tâches ou des services pendant un boot, les arrêter quand le serveur s’arrête et pouvoir superviser le service à tout moment.

Comment installer Upstart ?

Si vous êtes sur Ubuntu, il n’y a rien à faire. C’est installé d’origine.
Sinon un classique fera l’affaire :

Configuration de Upstart

Cet outil fonctionne avec des fichiers de configuration qu’il faut placer dans /etc/init/. Voici mon fichier web.conf pour mon serveur web NodeJS:

Voilà rien de bien compliqué. Je vais pas détailler plus, c’est assez simple à comprendre.

Utilisation de Upstart

Maintenant pour lancer son script comme un service c’est super simple. Il suffit d’exécuter:
Pour lancer le service:

Pour arreter le service:

Pour vérifier le statut du service:

Astuce

Si vous voyez celà pendant que vous lancez le service

C’est qu’il y a une erreur dans le fichier de configuration.
Ou que le fichier n’est pas dans /etc/init, ou que le fichier n’est pas web.conf. Mais là c’est que vous n’auriez pas bien suivi le tuto ;).