2017-10-06 9 views
0

J'ai installé le dernier nœud v8.6 sur mon Ubuntu 16.04 VPS. Le noeud app.js se trouve dans var/www/back-end.Échec du service Ubuntu Nodejs systemd

Maintenant, je suis en train de l'exécuter comme un service systemd, mais cela ne fonctionne pas:

Process: 8583 ExecStart=/usr/bin/nodejs /var/www/back-end/app.js (code=exited, status=1/FAILURE) 

dans d'autres questions que je lis sur le chemin de l'exécutable de noeud étant peut-être tort, mais j'ai vérifié avec « qui NodeJS 'et cela a donné'/usr/bin/nodejs '. J'ai également vérifié les autorisations pour var/www/back-end et ils sont correctement définis sur admin.

Dans une autre question, j'ai lu que apt-get l'appelait nodejs à cause d'un conflit et qu'un lien symbolique devait être créé, mais je n'étais pas convaincu. Je devrais noter que j'ai besoin de la dernière version du noeud en raison de ses caractéristiques, ainsi la rétrogradation n'est pas une option.

Une idée de ce qui pourrait être faux? Ou y at-il un fichier journal dans lequel je peux trouver une meilleure erreur, donc je sais ce qui cause cela?

Ceci est mon fichier .Service:

[Unit] 
Description=Node_API 
After=mongodb.service 

[Service] 
ExecStart=/usr/bin/nodejs /var/www/back-end/app.js 
Restart=always 
RestartSec=5 
StandardOutput=syslog 
StandardError=syslog 
SyslogIdentifier=nodeapi 
User=admin 
Group=admin 
Environment=PATH=/usr/bin:/usr/local/bin 
Environment=NODE_ENV=production PORT=3000 
WorkingDirectory=/var/www/back-end 

[Install] 
WantedBy=muti-user.target 

Répondre

2

Vous ne mentionnaient pas le test que la commande est exécutée correctement lorsqu'il est exécuté à partir de la CLI en tant qu'utilisateur admin:

cd /var/www/back-end && PATH=/usr/bin:/usr/local/bin NODE_ENV=production PORT=3000 /usr/bin/nodejs /var/www/back-end/app.js 

Vous avez également n » t mentionner la vérification des permissions sur les directions parentes de/var/et/www, juste le script lui-même. Ceux-ci devront également permettre à l'utilisateur admin d'avoir la permission execute, comme expliqué plus here. Enfin, votre sortie indique que le script a démarré mais a ensuite été fermé, vous devriez donc avoir la possibilité d'ajouter des diagnostics à votre script pour mieux comprendre pourquoi il ne démarre pas. Selon votre configuration, vous avez envoyé la sortie du script à syslog, vous devriez chercher les logs là-bas. Vous pouvez ajouter un console.log() dès que le script commence, et continuer à ajouter plus pour confirmer à quelle étape il est en train de mourir.

De plus, vous avez une faute de frappe ici: WantedBy=muti-user.target. Cela devrait être "multi-user.target".

Vous pouvez également utiliser systemd-analyze verify /path/to/your/file.service pour vérifier la syntaxe de votre fichier.

+0

Cela a été très utile, j'ai échoué à remarquer que l'application en effet déjà commencé alors j'ai regardé complètement dans la mauvaise direction. Il s'est avéré être une erreur dans le script lui-même. –