web-dev-qa-db-fra.com

Le démon ne fonctionne pas au démarrage

Sur une machine virtuelle Ubuntu (14.04), j'ai un serveur de nœud simple que je veux exécuter au démarrage. Le script suivant fonctionne lorsqu'il est appelé simplement en tant que ./noderoot start, mais ne s'exécute pas au démarrage. Le script est

#!/bin/sh
### BEGIN INIT INFO
# Provides: noderoot
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: bootin and rootin
# Description: Start root server on boot
### END INIT INFO
export PATH=$PATH:/usr/bin
export NODE_PATH=$NODE_PATH:/home/azureuser/npm/bin

case "$1" in
  start)
    forever --sourceDir=/var/www/root -p /var/www/logs app.js
  ;;
  stop)
    forever stop --sourceDir=/var/www/root app.js
  ;;
  *)
    echo "Usage: /etc/init.d/noderoot {start|stop}"
    exit 1
  ;;
esac

exit 0

Ce script réside dans /etc/init.d avec 755 pour les autorisations. J'ai essayé de lancer update-rc.d avec les résultats suivants:

root@linux-dev:~# update-rc.d noderoot defaults 80
 Adding system startup for /etc/init.d/noderoot ...
   /etc/rc0.d/K80noderoot -> ../init.d/noderoot
   /etc/rc1.d/K80noderoot -> ../init.d/noderoot
   /etc/rc6.d/K80noderoot -> ../init.d/noderoot
   /etc/rc2.d/S80noderoot -> ../init.d/noderoot
   /etc/rc3.d/S80noderoot -> ../init.d/noderoot
   /etc/rc4.d/S80noderoot -> ../init.d/noderoot
   /etc/rc5.d/S80noderoot -> ../init.d/noderoot
root@linux-dev:~# update-rc.d noderoot enable
update-rc.d: warning:  start runlevel arguments (none) do not match noderoot Default-Start values (2 3 4 5)
update-rc.d: warning:  stop runlevel arguments (none) do not match noderoot Default-Stop values (0 1 6)
 Enabling system startup links for /etc/init.d/noderoot ...
 Removing any system startup links for /etc/init.d/noderoot ...
   /etc/rc0.d/K80noderoot
   /etc/rc1.d/K80noderoot
   /etc/rc2.d/S80noderoot
   /etc/rc3.d/S80noderoot
   /etc/rc4.d/S80noderoot
   /etc/rc5.d/S80noderoot
   /etc/rc6.d/K80noderoot
 Adding system startup for /etc/init.d/noderoot ...
   /etc/rc0.d/K80noderoot -> ../init.d/noderoot
   /etc/rc1.d/K80noderoot -> ../init.d/noderoot
   /etc/rc6.d/K80noderoot -> ../init.d/noderoot
   /etc/rc2.d/S80noderoot -> ../init.d/noderoot
   /etc/rc3.d/S80noderoot -> ../init.d/noderoot
   /etc/rc4.d/S80noderoot -> ../init.d/noderoot
   /etc/rc5.d/S80noderoot -> ../init.d/noderoot

Autant que je sache, cela s'est terminé avec succès. Je peux démarrer le service en exécutant Sudo service noderoot start. Cependant, mon exécutable ne s'exécute pas au redémarrage de la machine. Y at-il un moyen de dépanner ce qui se passe? Un fichier journal particulier qui pourrait nous aider à résoudre ce problème?

2
Nathan

En regardant les journaux sur /var/log/boot.log (emplacement fourni par Letizia), j'ai trouvé une ligne très suspecte:

/etc/rc2.d/S80noderoot: 16: /etc/rc2.d/S80noderoot: forever: not found

La commande non trouvée a indiqué qu'il s'agissait d'un problème de chemin. Effectivement, les lignes

export PATH=$PATH:/usr/bin
export NODE_PATH=$NODE_PATH:/home/azureuser/npm/bin

ont été inversés. Changer ces variables pour pointer vers les bons répertoires, et ajouter un cd au script avant d'exécuter forever semble avoir résolu tous les problèmes rencontrés par le script d'exécution.

1
Nathan