如何修复退出状态127?

如何修复退出状态127?

我试图跟随本指南将 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

答案1

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

这是告诉直接systemd运行app.js。这个.js文件可以直接执行吗?如果没有,shell 将抛出退出代码 127 - “未知命令”。

答案2

127 是未找到命令。

确保 root 用户有权访问节点二进制文件,否则将以下行更改为已为其安装节点的用户

User=root
Group=root

否则尝试以下

[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

一旦您的服务器计算机启动并且您无法访问服务器,您可以通过以下命令检查 /var/log/syslog 中的日志来进行故障排除

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

开机启动:sudo systemctl 启用火箭

答案3

要调试,只需运行此命令(用 systemd 单元文件中的值替换 <> 部分:

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

问题是给定的User无法访问您设置的ExecStart内容。PATH

如果有人仍然遇到困难,我已经写了一份分步指南:调试系统

答案4

嘿,对于感兴趣的人,我遇到了这个问题,并尝试了一切,但最终从 Node 6 升级到 Node 12 解决了这个问题。

相关内容