GNU/Linux >> Tutoriels Linux >  >> Linux

Le service Systemd ne démarre pas Nodejs ?

J'essaie de faire démarrer mon application nodejs au démarrage. Il fonctionne bien si je le démarre à partir de la ligne de commande en tant qu'utilisateur odroid.

Voici mon fichier de service :

[Unit]
Description=ProImage
After=network.target mysql.service

[Service]
ExecStart=/bin/node //eadn-wc01-5196795.nxedge.io/proimage/app.js
Restart=on-failure
RootDirectory=/proimage
WorkingDirectory=/proimage
User=root

[Install]
WantedBy=multi-user.target

Quand je cours :

sudo systemctl status proimage_daemon

J'obtiens :

[email protected]:~$ sudo systemctl status proimage_daemon
● proimage_daemon.service - ProImage
   Loaded: loaded (/lib/systemd/system/proimage_daemon.service; enabled; vendor preset: enabled)
   Active: inactive (dead) (Result: exit-code) since Tue 2019-02-26 09:45:30 EST; 6s ago
  Process: 30797 ExecStart=/bin/node //eadn-wc01-5196795.nxedge.io/proimage/app.js (code=exited, status=200/CHDIR)
 Main PID: 30797 (code=exited, status=200/CHDIR)

Feb 26 09:45:29 odroid systemd[1]: proimage_daemon.service: Unit entered failed state.
Feb 26 09:45:29 odroid systemd[1]: proimage_daemon.service: Failed with result 'exit-code'.
Feb 26 09:45:30 odroid systemd[1]: proimage_daemon.service: Service hold-off time over, scheduling restart.
Feb 26 09:45:30 odroid systemd[1]: Stopped ProImage.
Feb 26 09:45:30 odroid systemd[1]: proimage_daemon.service: Start request repeated too quickly.
Feb 26 09:45:30 odroid systemd[1]: Failed to start ProImage.

J'ai regardé journalctl en utilisant :

journalctl -u proimage_daemon.service

et ça me donne la même chose :

[email protected]:~$ journalctl -u proimage_daemon.service --since 09:38
-- Logs begin at Tue 2019-02-26 09:02:47 EST, end at Tue 2019-02-26 10:02:34 EST. --
Feb 26 09:38:12 odroid systemd[1]: proimage_daemon.service: Trying to enqueue job proimage_daemon.service/stop/replace
Feb 26 09:38:12 odroid systemd[1]: proimage_daemon.service: Installed new job proimage_daemon.service/stop as 13040
Feb 26 09:38:12 odroid systemd[1]: proimage_daemon.service: Enqueued job proimage_daemon.service/stop as 13040
Feb 26 09:38:12 odroid systemd[1]: proimage_daemon.service: Job proimage_daemon.service/stop finished, result=done
Feb 26 09:38:12 odroid systemd[1]: Stopped ProImage ICU.
Feb 26 09:39:19 odroid systemd[1]: Started ProImage ICU.
Feb 26 09:39:19 odroid systemd[1]: proimage_daemon.service: Main process exited, code=exited, status=200/CHDIR
Feb 26 09:39:19 odroid systemd[1]: proimage_daemon.service: Unit entered failed state.
Feb 26 09:39:19 odroid systemd[1]: proimage_daemon.service: Failed with result 'exit-code'.
Feb 26 09:39:19 odroid systemd[1]: proimage_daemon.service: Service hold-off time over, scheduling restart.
Feb 26 09:39:19 odroid systemd[1]: Stopped ProImage ICU.

J'ai regardé une douzaine de messages sur ce problème. Ils disent tous que status=200/CHDIR indique un problème avec le répertoire de travail.

Dans mon cas, le répertoire de travail existe définitivement et il appartient à root. J'ai défini les autorisations sur 777 de manière récursive sur ce répertoire. J'ai essayé beaucoup de choses différentes avec le fichier de service, en vain.

Quelqu'un a-t-il une suggestion quant à ce qui pourrait être mon problème ?

Réponse acceptée :

Selon la documentation systemd exec, en définissant RootDirectory s'apparente à un chroot. En combinaison avec le paramètre WorkingDirectory , cela signifie que systemd chroote votre application sur /proimage puis en essayant dans ce répertoire vers cd /proimage , qui se traduirait par /proimage/proimage .

Si vous n'avez pas besoin de chrooter le processus, éliminez le RootDirectory directif. Si vous avez l'intention de chrooter le processus, éliminez le WorkingDirectory directives.

Connexe :Ssh - Journalisation des tentatives d'accès SSH ?
Linux
  1. Comment créer un service Systemd sous Linux

  2. Centos - Systemd tue le service immédiatement après le démarrage ?

  3. Steam ne démarre pas sur Ubuntu 16.04 ?

  4. Systemd :Utiliser à la fois After et Requires

  5. Script de démarrage systemd postgresql

Comment démarrer, arrêter ou redémarrer Apache

Commandes Systemctl pour gérer le service Systemd

10 commandes systemd pratiques :une référence

Gestion des cgroups avec systemd

Comment faire sortir un timer systemd du statut n/a ?

activation de socket systemd vs xinetd