In meinem Monitoring wurde mal wieder ein verfügbares update auf meinem „Zeitstrahl Datenbank“ Server (debian 10) gemeldet. Da es sich nicht um ein Sicherheitskritisches Updates handelt, wird es nicht automatisch installiert.
Nichts Ahnend haben ich das Update „Unpacking influxdb (1.8.7-1) over (1.8.6-1) …“ eingespielt und kurz darauf meldet mein Monitoring icinga2 „Connection refused“ für die Verbindung zum influxdb.
Mittels „systemctl status influxd.service
“ wurde ich schnell fündig, der Dienst läuft nicht mehr.
# systemctl status influxd.service ● influxdb.service - InfluxDB is an open-source, distributed, time series database Loaded: loaded (/lib/systemd/system/influxdb.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Mon 2021-08-02 20:19:24 CEST; 6min ago Docs: https://docs.influxdata.com/influxdb/ Process: 648 ExecStart=/usr/lib/influxdb/scripts/influxd-systemd-start.sh (code=exited, status=203/EXEC) Aug 02 20:19:24 xxxx systemd[1]: influxdb.service: Service RestartSec=100ms expired, scheduling restart. Aug 02 20:19:24 xxxx systemd[1]: influxdb.service: Scheduled restart job, restart counter is at 5. Aug 02 20:19:24 xxxx systemd[1]: Stopped InfluxDB is an open-source, distributed, time series database. Aug 02 20:19:24 xxxx systemd[1]: influxdb.service: Start request repeated too quickly. Aug 02 20:19:24 xxxx systemd[1]: influxdb.service: Failed with result 'exit-code'. Aug 02 20:19:24 xxxx systemd[1]: Failed to start InfluxDB is an open-source, distributed, time series database.
Okay, also der Dienst läuft nicht mehr. Da hier nur die letzten paar Zeilen angezeigt werden, lassen wir uns mit dem Befehl „journalctl -f -n 50 -u influxdb.service
“ die letzten 50 Zeilen anzeigen und scrollen die neuen Events automatisch mit.
# journalctl -f -n 50 -u influxdb.service
-- Logs begin at Mon 2021-08-02 20:19:23 CEST. --
Aug 02 20:19:23 xxxx systemd[1]: Starting InfluxDB is an open-source, distributed, time series database...
Aug 02 20:19:23 xxxx systemd[394]: influxdb.service: Failed to execute command: Permission denied
Aug 02 20:19:23 xxxx systemd[394]: influxdb.service: Failed at step EXEC spawning /usr/lib/influxdb/scripts/influxd-systemd-start.sh: Permission denied
Aug 02 20:19:23 xxxx systemd[1]: influxdb.service: Control process exited, code=exited, status=203/EXEC
Aug 02 20:19:23 xxxx systemd[1]: influxdb.service: Failed with result 'exit-code'.
Aug 02 20:19:23 xxxx systemd[1]: Failed to start InfluxDB is an open-source, distributed, time series database.
Aug 02 20:19:24 xxxx systemd[1]: influxdb.service: Service RestartSec=100ms expired, scheduling restart.
Aug 02 20:19:24 xxxx systemd[1]: influxdb.service: Scheduled restart job, restart counter is at 1.
Aug 02 20:19:24 xxxx systemd[1]: Stopped InfluxDB is an open-source, distributed, time series database.
Hier wird schnell sichtbar, dass die Datei „influxd-systemd-start.sh“ nicht mehr ausgeführt werden kann. Überprüft man die Rechte, ist zu sehen, das nur der User „root“ die Datei ausführen darf. In der Unit Datei für den Service steht jedoch, das der Dienst unter dem Benutzer „influxdb“ laufen soll. Kontrollieren können wir das mit diesen beiden Befehlen:
# ls -lah /usr/lib/influxdb/scripts/influxd-systemd-start.sh
-rwxr--r-- 1 root root 520 Jul 21 21:55 /usr/lib/influxdb/scripts/influxd-systemd-start.sh
# ls -lah /etc/systemd/system/influxd.service
lrwxrwxrwx 1 root root 36 Aug 16 2018 /etc/systemd/system/influxd.service -> /lib/systemd/system/influxdb.service
Mit dem Update wurde also etwas an einer oder beiden Dateien geändert. Was genau, müssten man mal überprüfen. Um den Dienst schnell wieder starten zu können, habe ich die Datei für „andere“ wieder Lesbar und Ausführbar gemacht.
chmod o=rx /usr/lib/influxdb/scripts/influxd-systemd-start.sh
Nun lässt sich der Dienst wieder problemlos mit „systemctl restart influxd.service
“ starten und kurz darauf folgt die Entwarnung aus dem Monitoring. Evtl. hilft das ja dem ein oder anderem, falls er nach einem Update auf das gleiche Problem stößt.
Nun war ich doch etwas neugierig, wie das passieren konnte. Also habe ich mich auf die suche gemacht. Zufällig war das alte Paket noch im apt cache lokal vorhanden. Nach einer kurzen Recherche konnte ich feststellen, das sich die Unit Datei für den Dienst geändert hat. Durch diese Änderung lässt sich das Problem also erklären.
# diff /tmp/influxdb_1.8.6-1.service /tmp/influxdb_1.8.7-1.service
13c13
< ExecStart=/usr/bin/influxd -config /etc/influxdb/influxdb.conf $INFLUXD_OPTS
---
> ExecStart=/usr/lib/influxdb/scripts/influxd-systemd-start.sh
15a16,17
> Type=forking
> PIDFile=/var/lib/influxdb/influxd.pid