systemd 서비스가 nodejs를 시작할 수 없습니다

systemd 서비스가 nodejs를 시작할 수 없습니다

부팅 시 Nodejs 애플리케이션을 시작하려고 합니다. odroid 사용자로 명령줄에서 시작하면 정상적으로 실행됩니다.

이것은 내 서비스 파일입니다.

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

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

[Install]
WantedBy=multi-user.target

내가 실행할 때 :

sudo systemctl status proimage_daemon

나는 얻다:

odroid@odroid:~$ 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 /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.

나는 다음을 사용하여 Journalctl을 보았습니다.

journalctl -u proimage_daemon.service

그것은 나에게 다음과 같은 결과를 제공합니다.

odroid@odroid:~$ 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.

나는 이 문제에 관한 수십 개의 게시물을 읽었습니다. 그들은 모두 status=200/CHDIR이 작업 디렉터리에 문제가 있음을 나타낸다고 말했습니다.

내 경우에는 작업 디렉토리가 확실히 존재하며 루트가 소유하고 있습니다. 이 디렉토리의 권한을 재귀적으로 777로 설정했습니다. 나는 서비스 파일을 가지고 다양한 방법을 시도했지만 아무 소용이 없었습니다.

내 문제에 대한 제안이 있는 사람이 있나요?

답변1

~에 따르면시스템 실행 문서, 설정은 RootDirectorychroot와 유사합니다. setup 과 결합하면 WorkingDirectory이는 systemd가 애플리케이션을 로 루트화하고 있음을 의미합니다 /proimage.이 디렉토리에로 변환되면 cd /proimage으로 변환됩니다 /proimage/proimage.

chroot 프로세스가 필요하지 않으면 이 RootDirectory지시문을 제거하십시오. 프로세스를 chroot하려는 경우 이 WorkingDirectory지시어를 제거하세요.

관련 정보