NodeJS et Supervisord ou comment passer en production

nodejs-supervisor

11 juil NodeJS et Supervisord ou comment passer en production

Lorsque NodeJS déclenche une anomalie non gérée ce dernier stop le programme. Pour pallier, nous allons utiliser Supervisor afin de redémarrer suite à une anomalie mais également suite à un changement de code, redémarrage du Raspberry.

Dans un premier temps, une petite mise à jour de vos paquets :

sudo apt-get update
sudo apt-get upgrade
Pour le redémarrage du script NodeJS en cas d'erreur et en cas de modification des sources, nous installons le module NodeJS Supervisor
sudo npm install supervisor -g

Il est ensuite possible de lancer notre script avec la commande suivante :

supervisor script.js

Nous allons maintenant préparer le démarrage automatique de notre script NodeJS. Nous allons utiliser un programme en python nommé supervisor.
On poursuit donc par la préparation du raspberry pour python.

Pour installer correctement Supervisor :

sudo pip install supervisor

Nous allons maintenant créer le ficher /etc/init.d/supervisor avec le contenu suivant :

#! /bin/bash -e

SUPERVISORD=/usr/local/bin/supervisord
PIDFILE=/tmp/supervisord.pid
OPTS="-c /etc/supervisord.conf"

test -x $SUPERVISORD || exit 0

. /lib/lsb/init-functions

export PATH="${PATH:+$PATH:}/usr/local/bin:/usr/sbin:/sbin"

case "$1" in
  start)
    log_begin_msg "Starting Supervisor daemon manager..."
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $SUPERVISORD -- $OPTS || log_end_msg 1
    log_end_msg 0
    ;;
  stop)
    log_begin_msg "Stopping Supervisor daemon manager..."
    start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE || log_end_msg 1
    log_end_msg 0
    ;;

  restart|reload|force-reload)
    log_begin_msg "Restarting Supervisor daemon manager..."
    start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $PIDFILE
    start-stop-daemon --start --quiet --pidfile /var/run/sshd.pid --exec $SUPERVISORD -- $OPTS || log_end_msg 1
    log_end_msg 0
    ;;

  *)
    log_success_msg "Usage: /etc/init.d/supervisor
{start|stop|reload|force-reload|restart}"
    exit 1
esac

exit 0

Il faut maintenant rendre exécutable ce fichier et le déclarer à lancer au démarrage.

sudo chmod +x /etc/init.d/supervisord
sudo update-rc.d supervisord defaults

Il faut maintenant créer un fichier de configuration par défaut

sudo echo_supervisord_conf > supervisord.conf
sudo mv supervisord.conf /etc/supervisord.conf

Pour Lancer notre script, nous devons modifier le fichier /etc/supervisord.conf
Ajouter à la fin :

[program:hcremote]
command=/opt/node/bin/supervisor /home/pi/hcremote/server.js
directory=/home/pi/hcremote
user=pi
autostart=true
autorestart=true
strdout_logfile = /home/pi/hcremote/hcremote.log
strderr_logfile = /home/pi/hcremote/hcremote_err.log
environment=HOME="//home/pi/hcremote",USER="pi"

Quelques commandes :

sudo service supervisord restart

Permet de redémarrer le supervisord

sudo supervisorctl update

Permet de prendre en compte les modifications du fichier de config

sudo supervisorctl status

Permet de voir le statut des programmes en cours

 

Be Sociable, Share!
No Comments

Sorry, the comment form is closed at this time.