Tentei seguir este guia para executar um aplicativo Node como um serviço. No entanto, ele está falhando ao iniciar, com o código de saída 127. Existe alguma maneira de corrigir isso?

Este é o diário.

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. 

Este é o 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 

Isso está na parte superior do meu app.js.

#!/usr/bin/env node 

Comentários

  • O que acontece quando você executa /home/pi/projects/ServiceName/app.js a partir do shell?
  • Funciona perfeitamente bem. Ele também funciona bem usando forever-service.
  • Qual é a saída de type node e df /home/pi/projects/ServiceName/app.js?
  • 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% /

Resposta

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

Isso está dizendo a systemd para executar app.js diretamente. Este arquivo .js pode ser executado diretamente? Caso contrário, o shell lançará um código de saída 127 – “Comando desconhecido”.

Comentários

  • De acordo com o guia que vinculei na pergunta, o shebang no topo de app.js deve torná-lo executável, porque especifica Node como o intérprete.
  • Acredito que @DopeGhoti estava se referindo à permissão executável – como in, " leitura-gravação-executável " permissões definidas por arquivo.
  • " Caso contrário, o shell lançará um código de saída 127 " – seja qual for o motivo exato do 127, o systemd não usa o shell para iniciar os serviços.

Resposta

127 é um comando não encontrado.

Certifique-se de que o usuário root tenha acesso a nó binário, caso contrário, altere as linhas seguintes com o usuário para o qual você instalou o nó

User=root Group=root 

Caso contrário, tente seguir

[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 

Assim que seu servidor mac hine está ativo & você não consegue acessar o servidor, você soluciona o problema verificando os logs de / var / log / syslog com o seguinte comando

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

Iniciar na inicialização: sudo systemctl enable rocketch

Resposta

Para depurar, execute isto (substituindo as partes < > com o valor do seu arquivo de unidade systemd:

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

O problema é o dado User não pode acessar ExecStart dentro do PATH que você definiu.

Se alguém ainda estiver travado, escrevi um guia passo a passo para: debugging systemd

Resposta

Ei, para qualquer pessoa interessada, tive esse problema e tentei de tudo, mas no final atualizando do N ode 6 a Node 12 corrigiu o problema.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *