Maxy.fr

Démarrer automatiquement Node.JS au démarrage de son serveur

Si vous avez déjà fait des programmes en utilisant Node.JS, vous êtes surement déjà tombé sur ce problème : Les scripts Node.JS ne se relance pas automatiquement lorsque l'on redémarre son serveur. Il faut donc s'y connecter manuellement pour tout relancer, ce qui est plutôt contraignant.

Voici donc un petit script shell permettant d'exécuter vos script ainsi que le moyen de le démarrer à chaque fois que le serveur démarre.

Le script shell

Il vous faudra créer une page, que vous appellerez comme vous le souhaitez et que vous enregistrerez dans le dossier /etc/init.d/ sur votre serveur. Ici ma page s'appelle "autostartnode", pensez-donc à modifier le nom dans le code si vous ne souhaitez pas utiliser le même.

#!/bin/bash
# /etc/init.d/autostartnode

### BEGIN INIT INFO
# Provides: autostartnode
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Démarrage automatique des scripts Node.JS
# Description: Démarrage automatique des scripts Node.JS
### END INIT INFO

lancement(){
	# On créé la session 'screen' en mode détaché
	screen -dmS nomScreen
	# On se déplace dans le chemin où se trouve nos scripts .js (Node.JS)
	screen -S nomScreen -p 0 -X stuff "cd /chemin/dossier/scripts/node/$(printf \\r)"
	# On lance notre script à l'aide de la commande 'node'
	screen -S nomScreen -p 0 -X stuff "/usr/local/bin/node server.js$(printf \\r)"

	sleep 3 # On patiente 3s le temps que le script s'execute

	# On vérifie que notre session screen se soit bien lancée et on affiche le résultat
	if ! screen -list | grep -q "nomScreen"
		then
		echo "AutoStartNode : Echec lors du lancement de 'nomScreen'"
	else
		echo "AutoStartNode : Lancement de 'nomScreen' reussi"
	fi

}

arret(){
	# On supprime la session 'screen' précedemment créée
	screen -X -S nomScreen kill

	sleep 3 # On patiente 3s

	# On vérifie que l'arrêt a bien fonctionnée
	if ! screen -list | grep -q "nomScreen"
		then
		echo "AutoStartNode : Arrêt de 'nomScreen' reussi"
	else
		echo "AutoStartNode : Echec lors de l'arrêt de 'nomScreen'"
	fi

}

case "$1" in
start)
	lancement
;;
stop)
	arret
;;
restart)
	arret
	lancement
;;

*)
echo "Usage: /etc/init.d/autostartnode {start|stop|restart}"
exit 1
;;
esac

exit 0

Le programme utilise 'screen', permettant la création de plusieurs sessions de terminaux. Une session sera créée pour chacun des scripts Node.JS qui seront exécutés. L'avantage de cette technique est que vous pourrez accéder facilement à chacun des terminaux pour voir l'état de votre serveur Node.JS.

Le programme est très simple, il comprend deux fonctions. Une pour le lancement et une pour l'arrêt des scripts. Il est possible d'utiliser trois arguments start, stop ou restart, c'est grâce à ceux-ci qu'on pourra faire en sorte que notre code s'exécute au lancement et à l'arrêt du serveur.

Tout le programme est commenté, je n'explique donc pas plus. Pour le lancement, il créé la session screen, exécute le script Node.JS et vérifie que la session soit bien lancée.

Le programme n'est pas vraiment optimisé et se contente du stricte minimum, il serait judicieux de vérifier qu'aucune session 'screen' du même nom existe déjà lors de sa création ... par exemple.

Ah et concernant la partie "BEGIN INIT INFO", je vous laisse vous renseigner si vous le souhaitez. Mais sachez qu'il s'agit d'une initialisation nécessaire pour son exécution automatique.

 

Configuration pour l'exécution automatique du script au lancement du serveur

Maintenant que votre script est prêt, il va falloir configurer votre serveur pour qu'il l'exécute automatiquement lors du démarrage ou de l'arrêt du serveur.

La première chose à faire est de donner les droits d'exécution de votre nouveau script. Pour cela voici la commande :

chmod +x /etc/init.d/autostartnode

Maintenant, pour dire à votre serveur d'exécuter le script à chaque arrêt/démarrage, utilisez la commande suivante :

sudo update-rc.d autostartnode defaults

C'est maintenant normalement fonctionnel.

 

Encore une fois cette technique est plutôt bancal et pas bien optimisé. Si vous avez d'autres techniques ou des suggestions, n'hésitez pas à en faire par dans les commentaires.

Catégories : Linux, Node.JS

Par Guillaume le 10/08/2016 à 22:33

Partager l'article :

Articles similaires

Comment résoudre le message Possible attack detected dans ISPConfig ?

Lorsque vous gérez un serveur web avec ISPConfig, il peut arriver que vous rencontriez le message d'avertissement "Possible attack detected. This action has been logged." sur l'interface web. Rendant son accès impossible. Cette alerte peut être déclenchée par...

Postfix : Régler le problème d'envoi d'email vers Gmail à cause d'IPV6

Si vous n'arrivez pas à envoyer d'email vers les adresses gmail depuis votre serveur et que vous obtenez l'erreur suivante, il s'agit probablement d'un problème de configuration si vous avez une IPV4 et une IPV6. Voici l'erreur en question : Our system has detected that this message...

Retrouver et arrêter une instance de Node.JS restée active

Si vous vous amusez un peu avec Node.JS, vous avez surement déjà exécuté un fichier node et le laisser tourner en fond. Vous avez l'habitude d'utiliser le raccourcie ctrl + c (cmd + c) ou ctrl + z (cmd + z) pour suspendre ou arrêter son processus, cependant si vous...