it-swarm.com.de

Redis beginnt nicht mit systemctl

Ich habe redis auf einem Ubuntu 16.04-Computer installiert und wenn ich /usr/local/bin/redis-server /etc/redis/cluster/7000/redis.conf Ausführe, wird es gestartet und ich kann ohne Probleme eine Verbindung herstellen.

Ich möchte es jedoch mit systemctl start redis Starten, daher habe ich die folgende Datei unter /etc/systemd/system/redis7000.service Erstellt.

[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/cluster/7000/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always

[Install]
WantedBy=multi-user.target

und die redis config hat supervised systemd gesetzt

was meiner Meinung nach gut aussieht, aber ich bekomme folgende Fehler:

Jan 19 14:54:27 ip-172-31-42-18 systemd[1]: Started Redis In-Memory Data Store.
Jan 19 14:54:27 ip-172-31-42-18 redis-server[21661]: 21661:C 19 Jan 14:54:27.680 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
Jan 19 14:54:27 ip-172-31-42-18 redis-server[21661]: 21661:C 19 Jan 14:54:27.680 # Redis version=4.0.6, bits=64, commit=00000000, modified=0, pid=21661, just started
Jan 19 14:54:27 ip-172-31-42-18 redis-server[21661]: 21661:C 19 Jan 14:54:27.680 # Configuration loaded
Jan 19 14:54:27 ip-172-31-42-18 redis-server[21661]: 21661:C 19 Jan 14:54:27.680 # systemd supervision requested, but NOTIFY_SOCKET not found
Jan 19 14:54:27 ip-172-31-42-18 systemd[1]: redis7000.service: Main process exited, code=exited, status=1/FAILURE
Jan 19 14:54:27 ip-172-31-42-18 systemd[1]: redis7000.service: Unit entered failed state.
Jan 19 14:54:27 ip-172-31-42-18 systemd[1]: redis7000.service: Failed with result 'exit-code'.
Jan 19 14:54:27 ip-172-31-42-18 systemd[1]: redis7000.service: Service hold-off time over, scheduling restart.
Jan 19 14:54:27 ip-172-31-42-18 systemd[1]: Stopped Redis In-Memory Data Store.

Und ich bin mir nicht mal sicher, was das bedeutet. Könnte mich jemand in die richtige Richtung führen?

7
munHunger

Um redis unter systemd auszuführen, müssen Sie supervised systemd Setzen.

Siehe Konfigurationsdatei:

# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
#   supervised no      - no supervision interaction
#   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
#   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
#   supervised auto    - detect upstart or systemd method based on
#                        UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
#       They do not enable continuous liveness pings back to your supervisor.
supervised no

Muss geändert werden zu:

supervised systemd

Sie können dies auch in der Befehlszeile übergeben, wodurch die Einstellung in redis.conf Überschrieben wird. Red Hat-basierte Systeme tun dies. Dies ermöglicht auch das manuelle Ausführen derselben Redis-Instanz oder von systemd aus, ohne die Konfigurationsdatei zu ändern.

ExecStart=/usr/bin/redis-server /etc/redis.conf --supervised systemd

Außerdem müssen Sie systemd mitteilen, dass redis in diesem Modus ausgeführt wird, indem Sie im Abschnitt Type=notify[Service] Einstellen.

13
Michael Hampton

Da ich aufgrund mangelnden Rufs keinen Kommentar hinzufügen kann, nehmen Sie dies bitte als Kommentar zu Michael Hampstons Antwort.

Verwenden Sie zum Ändern der Servicedatei systemd den Befehl systemctl edit redis-server, um eine Überschreibung zu erstellen. Geben Sie im resultierenden Bearbeitungsfenster Folgendes ein:

[Service]
Type=notify

Speichern und beenden, dann die Installation beenden apt install -f.

Wenn Sie den Dienst in /lib/systemd/system, Sie werden diese Änderungen beim nächsten Update verlieren.

Siehe: Systemd-Unit-Datei ändern, ohne Upstream-Unit-Datei zu ändern

PS: Diese Frage hat mich davor bewahrt, mich zu lange am Kopf zu kratzen, als ich gerade auf das Problem gestoßen bin.

6
AnthonyK

Eine Möglichkeit, dies zu debuggen, besteht darin, die Zeile ExecStart zu kopieren und auf dem Terminal auszuführen. Der Fehler wird häufig angezeigt. So erhalten Sie weitere Hinweise zum Debuggen und Lösen.

Ich habe das gleiche getan und habe einen genauen Fehler bekommen und ihn gelöst.

0
Viraj.Hadoop