Systemd

systemd 退出 create-react-app

  • August 14, 2020

我正在嘗試使用 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如“Started React Web Application”和最終“Starting development server…”。但是,systemctl status frontend報告該服務已載入但不活動/停止(編輯:或活動/退出)。

我嘗試對.service文件進行一些調整,特別是Type=forking,RemainAfterExit=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]: > blog@0.1.0 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...

本答案所述,截至 2020 年 2 月,該start.js過程規定在到達結束時退出stdin。當程序以非互動方式執行時(如通過 systemd 服務),結束stdin是立即的,因此腳本如上所述終止。

引用自:https://unix.stackexchange.com/questions/603633