4 votes

Faire tourner node.js en continu comme un démon

J'ai configuré forever pour exécuter mon serveur node.js au démarrage. en utilisant ce script. Ça marche bien. et forever garde le serveur en marche. Cependant, quand je lance forever list, je ne vois pas mon serveur ici! Je sais qu'il fonctionne mais il n'apparaît jamais dans cette liste. Il semble que le système exécute deux instances de forever.

root@ddd [/etc/init.d]# chkconfig  --list |grep node1
node1 0:off   1:off   2:on    3:on    4:on    5:on    6:off

Voici le script: /etc/init.d/node1

NOM=node1
NODE_BIN_DIR=/usr/local/bin
NODE_PATH=/usr/local/lib/node_modules
APPLICATION_DIRECTORY=/home/user1/www
APPLICATION_START=node1.js
PIDFILE=/var/run/node1.pid
LOGFILE=/var/log/node1.log

PATH=$NODE_BIN_DIR:$PATH
export NODE_PATH=$NODE_PATH

start() {
    echo "Démarrage de $NOM"
    forever --pidFile $PIDFILE --sourceDir $APPLICATION_DIRECTORY \
        -a -l $LOGFILE --minUptime 5000 --spinSleepTime 2000 \
        start $APPLICATION_START &
    RETVAL=$?
}

stop() {
    if [ -f $PIDFILE ]; then
        echo "Arrêt de $NOM"
        forever stop $APPLICATION_START
        rm -f $PIDFILE
        RETVAL=$?
    else
        echo "$NOM ne fonctionne pas."
        RETVAL=0
    fi
}

restart() {
    echo "Redémarrage de $NOM"
    stop
    start
}

status() {
    echo "Statut pour $NOM:"
    forever list
    RETVAL=$?
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status
        ;;
    restart)
        restart
        ;;
    *)
        echo "Utilisation: {start|stop|status|restart}"
        exit 1
        ;;
esac
exit $RETVAL

3voto

danday74 Points 15895

Je ne perdrais pas mon temps à essayer de daemoniser pour toujours.

pm2 est le nouveau roi! forever est mort, croyez-moi

voici comment exécuter pm2 en tant que service systemd ou équivalent OS:

npm install -g pm2

pm2 startup

maintenant vous pouvez faire:

service pm2 status|start|stop|restart

aussi:

pm2 save

prendra un instantané de vos applications pm2 en cours d'exécution et les redémarrera toutes au démarrage (aucune entrée crontab requise)

terminé!

pm2 est BEAUCOUP mieux que forever. Il fait exactement la même chose que forever mais plus!

pm2 list # équivalent à forever list

pm2 start app.js --name "wotever" # équivalent à forever start

pm2 start app.js -i 0 --name "wotever" # équilibrer la charge de votre application sur tous les cœurs disponibles

Avez-vous vu cette dernière commande? Comprenez-vous ce que cela signifie? Je suis impressionné!

Généralement, votre application s'exécute sur un seul cœur. Plus maintenant! Nous parlons de vitesse!

PM2 FOREVER!

2voto

R Porter Points 609

Vous pourriez également simplement mettre 'forever' dans le crontab d'un utilisateur, en utilisant le paramètre @reboot pour qu'il démarre au démarrage.

quelque chose comme:

@reboot /usr/bin/forever start /chemin/vers/script.js

(Cela suppose que 'forever' se trouve dans /usr/bin/; il peut également se trouver quelque part comme /usr/local/bin/.)

0voto

Ivan P Points 489

Le problème est que forever garde tous ses fichiers dans ~/.forever. Le script ci-dessus s'exécute en tant que root. Je ne suis pas sûr où il les stocke ensuite, mais pour moi, "sudo forever list" fait l'affaire.

0voto

Abu Sufian Points 72

Il suffit d'utiliser la commande start forever start /chemin/vers/script.js

0voto

nullability Points 4590

J'aime utiliser forever-service pour mettre en service les processus node.js, il se chargera de tout en les démarrant au démarrage et en redirigeant les fichiers journaux.

Voir https://www.npmjs.com/package/forever-service

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X