从服务运行的 NodeJS 服务器给出错误“无法执行命令:Exec 格式错误”

从服务运行的 NodeJS 服务器给出错误“无法执行命令:Exec 格式错误”

我不太擅长服务器管理工​​作,如果我遗漏了任何步骤,请原谅我。

我有一个正常运行的 Node Express 服务器,我正在部署它,forever但现在我想将它移至系统服务。我创建了我的服务文件/lib/systemd/system/myservice.service

[Unit]
Description=website service
After=network.target

[Service]
ExecStart=/home/myuser/.nvm/versions/node/v12.14.0/bin/node /home/myuser/WSProject/src/server/index.js
Type=simple
Restart=on-failure

[Install]
WantedBy=multi-user.target

我按照指南得到了这个配置。我已经确认节点路径是正确的,是我使用时返回的路径which node。我重新启动守护进程,然后重新启动服务。服务失败。如果我检查该服务的journalctl,我可以看到以下错误:

Jul 30 12:55:03 psjqw2q9h systemd[1]: Started Run the encore server.
Jul 30 12:55:03 psjqw2q9h systemd[22298]: myservice.service: Failed to execute command: Exec format error
Jul 30 12:55:03 psjqw2q9h systemd[22298]: myservice.service: Failed at step EXEC spawning /home/myuser/WSProject/src/server/index.js: Exec format error
Jul 30 12:55:03 psjqw2q9h systemd[1]: myservice.service: Main process exited, code=exited, status=203/EXEC
Jul 30 12:55:03 psjqw2q9h systemd[1]: myservice.service: Failed with result 'exit-code'.
Jul 30 12:55:03 psjqw2q9h systemd[1]: myservice.service: Service hold-off time over, scheduling restart.
Jul 30 12:55:03 psjqw2q9h systemd[1]: myservice.service: Scheduled restart job, restart counter is at 1.
Jul 30 12:55:03 psjqw2q9h systemd[1]: Stopped Run the encore server.

这就是我得到的。我不知道如何进一步解决这个问题。我可以找到与此类似的问题,但要么与节点nodejs相关,要么像配置文件中的空格之类的小问题。正如一篇文章所述,我尝试了各种形式的用引号引起来的 ExecStart 命令。我在某个时候有一条用户线,但无论我将其设置为根用户还是其他用户,或者完全将其保留,这都没有什么区别。

答案1

解决方案是调整 myservice.service 文件的权限,然后将 WalkingDirectory 值添加到需要运行节点应用程序的位置。

相关内容