이 가이드 를 따라 Node 애플리케이션을 서비스로 실행하려고했습니다. 그러나 종료 코드 127과 함께 시작되지 않습니다.이 문제를 해결할 방법이 있습니까?

이 저널입니다.

sudo journalctl --follow -u serviceName -- Logs begin at Tue 2017-08-08 16:27:10 GMT. -- Aug 08 17:06:57 raspberrypi systemd[1]: Started serviceName. Aug 08 17:06:57 raspberrypi app.js[7234]: [46B blob data] Aug 08 17:06:57 raspberrypi systemd[1]: serviceName.service: main process exited, code=exited, status=127/n/a Aug 08 17:06:57 raspberrypi systemd[1]: Unit serviceName.service entered failed state. Aug 08 17:06:57 raspberrypi systemd[1]: serviceName.service holdoff time over, scheduling restart. Aug 08 17:06:57 raspberrypi systemd[1]: Stopping serviceName... Aug 08 17:06:57 raspberrypi systemd[1]: Starting serviceName... Aug 08 17:06:57 raspberrypi systemd[1]: serviceName.service start request repeated too quickly, refusing to start. Aug 08 17:06:57 raspberrypi systemd[1]: Failed to start serviceName. Aug 08 17:06:57 raspberrypi systemd[1]: Unit serviceName.service entered failed state. 

serviceName.service입니다.

[Unit] Description=ServiceName After=network.target [Service] ExecStart=/home/pi/projects/ServiceName/app.js Restart=always User=root Group=root Environment=PATH=/usr/bin:/usr/local/bin Environment=NODE_ENV=production WorkingDirectory=/home/pi/projects/ServiceName [Install] WantedBy=multi-user.target 

내 app.js 상단에 있습니다.

#!/usr/bin/env node 

댓글

  • 셸에서 /home/pi/projects/ServiceName/app.js를 실행하면 어떻게 되나요?
  • 완벽하게 잘 실행됩니다. 또한 forever-service를 사용하여 정상적으로 실행됩니다.
  • type node 및 ?
  • 1. node is /home/pi/.nvm/versions/node/v7.8.0/bin/node 2. Filesystem 1K-blocks Used Available Use% Mounted on /dev/root 6166268 4446224 1383764 77% /

답변

ExecStart=/home/pi/projects/ServiceName/app.js 

이것은 systemd에게 app.js를 직접 실행하도록 지시합니다. 이 .js 파일을 직접 실행할 수 있습니까? 그렇지 않은 경우 셸은 종료 코드 127- “알 수없는 명령”을 표시합니다.

설명

  • 질문에 링크 한 가이드에 따르면, app.js 상단의 shebang은 Node를 인터프리터로 지정하기 때문에 실행 가능하게 만들어야합니다.
  • @DopeGhoti가 실행 권한을 참조했다고 생각합니다. " 읽기-쓰기 실행 가능 " 파일 당 권한 설정
  • " 그렇지 않으면 셸이 종료 코드 127 "를 표시합니다. 127의 정확한 이유가 무엇이든 systemd는 서비스를 시작하는 데 셸을 사용하지 않습니다.

li>

답변

127은 명령을 찾을 수 없습니다.

루트 사용자가 다음에 대한 액세스 권한이 있는지 확인하십시오. 노드 바이너리 else 노드를 설치 한 사용자와 함께 다음 줄을 변경합니다.

User=root Group=root 

Else 다음을 시도해보세요

[Unit] Description="ServiceName" After=network.target [Service] ExecStart=path_to_node/node /home/pi/projects/ServiceName/app.js Restart=always # Restart service after 10 seconds if node service crashes RestartSec=10 # Output to syslog StandardOutput=syslog StandardError=syslog #Change this to find app logs in /var/log/syslog SyslogIdentifier=nodejs-api # Followig will require if you are using the PORT or Node from Envirnoment Environment=NODE_ENV=production PORT=3000 [Install] WantedBy=multi-user.target 

서버 Mac hine이 작동 중입니다. & 서버에 액세스 할 수 없습니다. 다음 명령으로 / var / log / syslog에서 로그를 확인하여 문제를 해결합니다.

sudo grep "nodejs-api" /var/log/syslog 

부팅시 시작 : sudo systemctl 활성화 rocketch

Answer

디버그하려면 이것을 실행하십시오 (< > 부분으로 대체) systemd 단위 파일의 값으로 :

 sudo runuser -l <User> -g <Group> -c "cd <WorkingDirectory> && <PATH> <ExecStart>"  

문제는 주어진 User는 설정 한 PATH 내에서 ExecStart에 액세스 할 수 없습니다.

아직도 멈춰있는 사람이 있다면 다음 단계에 대한 단계별 가이드를 작성했습니다. 디버깅 시스템

답변

관심있는 사람을 위해이 문제가 있었고 태양 아래서 모든 것을 시도했지만 결국 N에서 업그레이드했습니다. ode 6에서 Node 12로이 문제를 해결했습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다