systemd 退出 create-react-app

systemd 退出 create-react-app

我正在尝试使用 systemd 服务来运行 Node 应用程序(具体来说,是使用 create-react-app 生成的 React 应用程序)。我将一个文件frontend.service/etc/systemd/system/至少)包含以下内容:

[Unit]
Description=React Web Application

[Service]
ExecStart=/usr/local/bin/npm start --prefix=<path to app>

[Install]
WantedBy=multi-user.target

启动服务后,我的浏览器显示nginxbad gateway错误,并且ps aux | grep node没有显示相应的进程。报告成功步骤的输出journalctl -u frontend,例如“启动 React Web 应用程序”和最终“启动开发服务器...”。但是,systemctl status frontend报告服务已加载但处于非活动/死亡状态(编辑:或活动/退出)。

我尝试对.service文件进行一些调整,特别是Type=forkingRemainAfterExit=trueKillMode=process。但问题仍然存在。到底是怎么回事?如何解决这个问题?

npm start如果我直接在 shell 中运行该应用程序,它确实可以正常工作。此外,另一个(非节点)Web 服务器通过类似的 systemd 脚本运行良好。

这是 systemctl 状态输出:

wm-frontend.service - React Web Application
   Loaded: loaded (/etc/systemd/system/wm-frontend.service; enabled; vendor preset: enabled)
   Active: active (exited) since Mon 2020-08-10 14:40:59 UTC; 32min ago
  Process: 4033 ExecStart=/usr/local/bin/npm start --prefix=/home/mw/wm-ax/frontend/blog --scripts-prepend-node-path (code=exited, status=0/SUCCESS)
 Main PID: 4033 (code=exited, status=0/SUCCESS)

Aug 10 14:40:59 localhost systemd[1]: Started React Web Application.
Aug 10 14:41:00 localhost npm[4033]: > [email protected] start /home/mw/wm-ax/frontend/blog
Aug 10 14:41:00 localhost npm[4033]: > react-scripts start
Aug 10 14:41:04 localhost npm[4033]: ℹ 「wds」: Project is running at http://0.0.0.0:3000/
Aug 10 14:41:04 localhost npm[4033]: ℹ 「wds」: webpack output is served from
Aug 10 14:41:04 localhost npm[4033]: ℹ 「wds」: Content not from webpack is served from /home/mw/wm-ax/frontend/blog/public
Aug 10 14:41:04 localhost npm[4033]: ℹ 「wds」: 404s will fallback to /
Aug 10 14:41:04 localhost npm[4033]: Starting the development server...

答案1

如中所述这个答案,截至 2020 年 2 月,start.js流程为规定退出当它到达 的末尾时stdin。当进程以非交互方式运行时(如通过 systemd 服务),stdin会立即结束,因此脚本将如上所述终止。

相关内容