我不太擅长服务器管理工作,如果我遗漏了任何步骤,请原谅我。
我有一个正常运行的 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 值添加到需要运行节点应用程序的位置。