Ich versuche, einen systemd-Dienst für eine einfache React-Anwendung einzurichten. Diese Anwendung wird in /home/myuser/test gehostet. Sowohl npm als auch node befinden sich im PATH und sind fest mit /usr/bin verknüpft. Alle Dateien haben Berechtigungen für den Benutzer und die Gruppe myuser:myuser. Wenn ich dies manuell starte, wird npm start
es korrekt gestartet und stellt die App vonhttp://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.
Wenn ich versuche, die Anwendung über systemd zu starten, schlägt dies fehl, ohne dass ich den Grund dafür nennen kann. Ich starte sie vom gleichen Pfad aus, mit dem gleichen Benutzer und habe alle denkbaren Kombinationen für ExecStart ausprobiert:
ExecStart=npm start
ExecStart=/usr/bin/npm start
ExecStart=/usr/bin/node /home/myuser/test/node_modules/react-scripts/scripts/start.js
Sie führen alle zum gleichen Ergebnis, d. h., es „startet“ ordnungsgemäß und schlägt kurz darauf einfach fehl, ohne dass dafür offenbar in journalctl ein Grund angegeben wird:
$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...
Und ein paar Sekunden später...
$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)
Ich erhalte ständig die folgende Meldung über 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/
Die systemd-Servicedatei hat sich im Laufe der Zeit geändert, aber der Fehler ist unabhängig von ExecStart und anderen Änderungen derselbe. Dies ist der aktuelle Inhalt:
[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
Das Betriebssystem ist Centos7. Alle Tests wurden mit demselben Benutzer durchgeführt, kein sudo, dieselben Befehle sowohl manuell als auch über systemd. Manueller Start funktioniert, systemd nicht.
Abschließend möchte ich noch erwähnen, dass ich eine Express-NodeJS-Anwendung über systemd habe und sie mit derselben systemd-Konfiguration korrekt gestartet wird. Nur bei React schlägt sie fehl.
Jede Hilfe wäre sehr willkommen!
Danke
Nissy
Antwort1
Versuchen Sie, StandardInput=tty-force
Ihrem [Service]
Abschnitt etwas hinzuzufügen