GNU/Linux >> Tutoriales Linux >  >> Linux

¿El servicio Systemd no iniciará Nodejs?

Estoy tratando de hacer que mi aplicación nodejs se inicie en el arranque. Funciona bien si lo inicio desde la línea de comandos como usuario odroid.

Aquí está mi archivo de servicio:

[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

Cuando ejecuto:

sudo systemctl status proimage_daemon

obtengo:

[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.

Miré journalctl usando:

journalctl -u proimage_daemon.service

y me da lo mismo lo siguiente:

[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.

He mirado una docena de publicaciones sobre este problema. Todos dicen que status=200/CHDIR indica un problema con el directorio de trabajo.

En mi caso, el directorio de trabajo definitivamente existe y es propiedad de root. Establecí los permisos en 777 recursivamente en este directorio. Probé muchas cosas diferentes con el archivo de servicio, todo fue en vano.

¿Alguien tiene alguna sugerencia sobre cuál puede ser mi problema?

Respuesta aceptada:

Según la documentación de systemd exec, configurando RootDirectory es similar a un chroot. En combinación con la configuración de WorkingDirectory , significa que systemd está haciendo chroot en tu aplicación a /proimage y luego intentar dentro de ese directorio a cd /proimage , que se traduciría a /proimage/proimage .

Si no necesita chrootear el proceso, elimine el RootDirectory directiva. Si tiene la intención de chrootear el proceso, elimine el WorkingDirectory directiva.

Relacionado:Ssh – ¿Registro de intentos de acceso SSH?
Linux
  1. Administrar el inicio usando systemd

  2. Comience a usar systemd como una herramienta de solución de problemas

  3. Servicios de inicio, detención y reinicio en el servidor systemd RHEL 7 Linux

  4. Cómo crear un servicio Systemd en Linux

  5. Systemd:Uso de After y Requires

Cómo iniciar, detener o reiniciar Apache

Comandos Systemctl para administrar el servicio Systemd

10 comandos prácticos de systemd:una referencia

Administrar cgroups con systemd

Cómo detener el servicio systemd

activación de socket systemd frente a xinetd