web-dev-qa-db-ja.com

NodeJS React Systemdサービスが機能していません

単純な反応アプリケーションのsystemdサービスを設定しようとしています。このアプリケーションは/ home/myuser/testでホストされています。 npmとnodeの両方がPATHにあり、/ usr/binにハードリンクされています。すべてのファイルには、myuser:myuserユーザーおよびグループに対する権限があります。これをnpm startを使用して手動で起動すると、正しく起動し、http://localhost:3000からアプリを提供します

    Compiled successfully!

You can now view test in the browser.

  Local:            http://localhost:3000
  On Your Network:  http://myipaddress:3000

Note that the development build is not optimized.
To create a production build, use npm run build.

Systemdを介してアプリケーションを起動しようとすると失敗しますが、理由は特定されません。私は同じユーザーから同じパスから起動し、ExecStartで考えられるすべての組み合わせを試しました。

ExecStart=npm start
ExecStart=/usr/bin/npm start
ExecStart=/usr/bin/node /home/myuser/test/node_modules/react-scripts/scripts/start.js

それらはすべて同じ結果を生成します。つまり、「正常に開始」され、失敗した直後に、明らかにjournalctlに理由がありません。

 $Sudo systemctl status node-client   
 ● node-client.service - Node-React Frontend Server
   Loaded: loaded (/etc/systemd/system/node-client.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-04-08 09:46:10 UTC; 679ms ago
 Main PID: 18165 (node)
   CGroup: /system.slice/node-client.service
           └─18165 /usr/bin/node /home/myuser/test/node_modules/react-scripts/scripts/start.js

Apr 08 09:46:10 hostname systemd[1]: Started Node-React Frontend Server.
Apr 08 09:46:10 hostname systemd[1]: Starting Node-React Frontend Server...

そして数秒後...

$Sudo systemctl status node-client
● node-client.service - Node-React Frontend Server
   Loaded: loaded (/etc/systemd/system/node-client.service; disabled; vendor preset: disabled)
   Active: activating (auto-restart) since Wed 2020-04-08 09:46:00 UTC; 3s ago
  Process: 18142 ExecStart=/usr/bin/node /home/ec2-user/test/node_modules/react-scripts/scripts/start.js (code=exited, status=0/SUCCESS)
 Main PID: 18142 (code=exited, status=0/SUCCESS)

私はjournalctlで次を取得し続けます

    -- Logs begin at Tue 2020-03-17 15:04:59 UTC, end at Wed 2020-04-08 09:48:23 UTC. --
Apr 08 09:48:22 hostname systemd[1]: Starting Node-React Frontend Server...
Apr 08 09:48:22 hostname systemd[1]: Started Node-React Frontend Server.
Apr 08 09:48:22 hostname systemd[1]: node-client.service holdoff time over, scheduling restart.
Apr 08 09:48:12 hostname nodeclient[18390]: Starting the development server...
Apr 08 09:48:12 hostname nodeclient[18390]: ℹ 「wds」: 404s will fallback to /
Apr 08 09:48:12 hostname nodeclient[18390]: ℹ 「wds」: Content not from webpack is served from /home/myuser/test/public
Apr 08 09:48:12 hostname nodeclient[18390]: ℹ 「wds」: webpack output is served from
Apr 08 09:48:12 hostname nodeclient[18390]: ℹ 「wds」: Project is running at http://myipaddress/
Apr 08 09:48:10 hostname systemd[1]: Starting Node-React Frontend Server...
Apr 08 09:48:10 hostname systemd[1]: Started Node-React Frontend Server.
Apr 08 09:48:10 hostname systemd[1]: node-client.service holdoff time over, scheduling restart.
Apr 08 09:48:00 hostname nodeclient[18368]: Starting the development server...
Apr 08 09:48:00 hostname nodeclient[18368]: ℹ 「wds」: 404s will fallback to /
Apr 08 09:48:00 hostname nodeclient[18368]: ℹ 「wds」: Content not from webpack is served from /home/myuser/test/public
Apr 08 09:48:00 hostname nodeclient[18368]: ℹ 「wds」: webpack output is served from
Apr 08 09:48:00 hosntame nodeclient[18368]: ℹ 「wds」: Project is running at http://myipaddress/

Systemdサービスファイルは時間の経過とともに変更されましたが、ExecStartおよびその他の変更に関係なく、エラーは同じでした。これは、現時点での内容です。

[Unit]
Description=Node-React Frontend Server
After=syslog.target network.target

[Service]
ExecStart=/usr/bin/node node_modules/react-scripts/scripts/start.js
Restart=always
RestartSec=10s
TimeoutSec=900
User=myuser
Group=myuser
Environment=PATH=/usr/bin:/usr/local/bin
WorkingDirectory=/home/myuser/test/
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=nodeclient

[Install]
WantedBy=multi-user.target

OSはCentos7です。すべてのテストは、手動およびsystemdの両方で、同じユーザー、Sudo、同じコマンドを使用して行われました。手動での起動は機能しますが、systemdは機能しません。

最後に、言及するには、私はsystemdを介してExpress-NodeJSアプリケーションを使用しており、同じsystemd構成で正しく起動しています。 Reactの場合のみ失敗します。

どんな助けでも大歓迎です!

ありがとう

ニッシー

2
Nissy A.W.

アップグレード後に同じ問題が発生しました。systemdサービスは、起動するたびにエラーコード0で終了し始めました。

これは、react-scripts start.jsに対する2月の更新によるものです。

これを解決するために、stdinの終了時にstart.jsを終了させる変更をコメントアウトしました。サービスには標準入力がないため、アプリの起動前に存在します。これはnode-modules/react-scripts/start.jsにあります

if (isInteractive || process.env.CI !== 'true') { // Gracefully exit when stdin ends // process.stdin.on('end', function() { // devServer.close(); // process.exit(); // }); process.stdin.resume(); }

Stdinが終了したときに終了するstart.jsの変更は https://github.com/facebook/create-react-app/pull/7203/files/108bafe5d5b85c9544dd05b5ed42b4e90c66b2ca に記載されています

2
lzb