*Erledigt* - Mosquitto läuft aber Service nicht - Failed to start Mosquitto MQTT Broker.

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    ich habe eine Frage. Eigentlich ist mosquitto auf meinem Raspberry 4 so konfiguriert, dass es automatisch als Dienst starten sollte. Das tut es seit ich glaube einer Woche nicht mehr. Wenn ich mosquitto starte mit diesem Befehl, läuft es als Prozess.

    sudo mosquitto -c /etc/mosquitto/conf.d/my_mosquitto.conf


    Schaue ich allerdings nach dem Status, sehe ich, dass dieser nicht läuft.

    sudo service mosquitto status

    bzw.

    sudo systemctl status mosquitto.service


    Der Output von

    sudo service mosquitto restart

    Code
    Job for mosquitto.service failed because the control process exited with error code.
    See "systemctl status mosquitto.service" and "journalctl -xe" for details.


    Der Output von

    sudo journalctl -xe



    Der Inhalt von

    /lib/systemd/system/mosquitto.service


    Der Output von

    sudo /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

    Code
    1684704498: Loading config file /etc/mosquitto/conf.d/my_mosquitto.conf
    
    1684704498: Error: Unable to restore persistent database. Unrecognised file format.
    
    1684704498: Error: Couldn't open database.

    Der Inhalt von

    /etc/mosquitto/mosquitto.conf


    Der Inhalt von

    /etc/mosquitto/conf.d/my_mosquitto.conf

    Code
    #### MY SETTINGS ####
    
    listener 1883
    allow_anonymous true


    Der Inhalt vom Logfile

    sudo tail -f /var/log/mosquitto/mosquitto.log

    Code
    1684486475: Saving in-memory database to /var/lib/mosquitto//mosquitto.db.
    1684488276: Saving in-memory database to /var/lib/mosquitto//mosquitto.db.
    1684490077: Saving in-memory database to /var/lib/mosquitto//mosquitto.db.
    1684491878: Saving in-memory database to /var/lib/mosquitto//mosquitto.db.
    1684493679: Saving in-memory database to /var/lib/mosquitto//mosquitto.db.
    1684495480: Saving in-memory database to /var/lib/mosquitto//mosquitto.db.
    1684497281: Saving in-memory database to /var/lib/mosquitto//mosquitto.db.
    1684499082: Saving in-memory database to /var/lib/mosquitto//mosquitto.db.
    1684500883: Saving in-memory database to /var/lib/mosquitto//mosquitto.db.


    Hat jemand eine Idee?

    Grüße

    Einmal editiert, zuletzt von DeeZett (22. Mai 2023 um 17:00)

  • *Erledigt* - Mosquitto läuft aber Service nicht - Failed to start Mosquitto MQTT Broker.? Schau mal ob du hier fündig wirst!

  • Hallo,

    das entscheidende dürfte wohl dieser Teil im journal sein

    Mai 21 23:43:12 raspberrypi mosquitto[5614]: 1684705392: Error: Unable to restore persistent database. Unrecognised file format.

    Mai 21 23:43:12 raspberrypi mosquitto[5614]: 1684705392: Error: Couldn't open database.

    Vielleicht findest du damit mehr im Internet.

    Genügend Speicherplatz ist vorhanden?

    Gibts einen Dateisystemfehler?

  • Moin DeeZett,

    um zu prüfen, ob deine Serviceunit ok ist. Was sagt denn systemctl start mosquitto.service??

    Wenn das funktioniert, dann startest du zu früh. Du hast dich ja an einem anderen Thread angehangen. Schau doch einfach was ihm für den "after"-Eintrag vorgeschlagen wurde. Anscheinend hat das ja geklappt. Sonst wäre er wieder gekommen...

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Laut #1 startest Du manuell mosquitto mit der Konfiguration von /etc/mosquitto/conf.d/my_mosquitto.conf.

    Mosquitto.service startet aber mit /etc/mosquitto/mosquitto.conf (code=exited ...

    Möglicherweise waren die beiden Configs einmal verlinkt und haben die Verbindung verloren (Broken Link).

    Ob Dein root-Filesystem noch 100%-ig in Ordnung ist, kannst Du beispielsweise mit < sudo dumpe2fs -h /dev/mmcblk0p2 | grep orphan > testen. Wenn ein erster verwaister Inode angezeigt wird, bedarf das Filesystem einer manuellen Reparatur.

    Servus !

    RTFM = Read The Factory Manual, oder so

  • Rasp-Berlin

    Zitat von mosquitto Changelog

    mosquitto (2.0.10-6) unstable; urgency=medium

    * Don't chown /run/mosquitto in mosquitto.postinst, this is done in the systemd unit file at run time. (closes: #983429).

    * systemd-run.patch: use /run/mosquitto instead of /var/run/mosquitto in systemd unit file.

    -- Roger A. Light <roger@atchoo.org> Mon, 26 Apr 2021 22:07:57 +0100

    Wenn du nichts zu sagen hast, sag einfach nichts.

    Einmal editiert, zuletzt von llutz (24. Mai 2023 um 07:03) aus folgendem Grund: Deutlicher gemacht, an wen das Zitat gerichtet ist.

  • llutz

    ist die Datei mit gemeint? Hier wird kein /var/run/mosquitto verwendet, sondern schon /run/mosquitto wenn ich das richtig sehe.

    /lib/systemd/system/mosquitto.service


    Was sagt denn ein file /var/lib/mosquitto/mosquitto.db bzw. ein ls -la /var/lib/mosquitto/

    pi@raspberrypi:~ $ ls -la /var/lib/mosquitto/mosquitto.db

    -rw------- 1 mosquitto mosquitto 4658 19. Mai 15:24 /var/lib/mosquitto/mosquitto.db


    Genügend Speicherplatz ist vorhanden?

    Ja, ist genügend freier Speicher vorhanden.


    um zu prüfen, ob deine Serviceunit ok ist. Was sagt denn systemctl start mosquitto.service??

    pi@raspberrypi:~ $ sudo systemctl start mosquitto.service

    Job for mosquitto.service failed because the control process exited with error code.

    See "systemctl status mosquitto.service" and "journalctl -xe" for details.


    Laut #1 startest Du manuell mosquitto mit der Konfiguration von /etc/mosquitto/conf.d/my_mosquitto.conf.

    Mosquitto.service startet aber mit /etc/mosquitto/mosquitto.conf (code=exited ...

    Möglicherweise waren die beiden Configs einmal verlinkt und haben die Verbindung verloren (Broken Link).

    Ich wollte damit nur zeigen, dass sich mosquitto manuell mit der Konfiguration von /etc/mosquitto/conf.d/my_mosquitto.conf als Prozess starten lässt.

    Ob Dein root-Filesystem noch 100%-ig in Ordnung ist, kannst Du beispielsweise mit < sudo dumpe2fs -h /dev/mmcblk0p2 | grep orphan > testen. Wenn ein erster verwaister Inode angezeigt wird, bedarf das Filesystem einer manuellen Reparatur.

    pi@raspberrypi:~ $ sudo dumpe2fs -h /dev/mmcblk0p2 | grep orphan

    dumpe2fs 1.46.2 (28-Feb-2021)

    First orphan inode: 267723

    Scheint dann wohl defekt zu sein. Wie kann ich das beheben?

  • Der Output von

    sudo service mosquitto restart

    Code
    Job for mosquitto.service failed because the control process exited with error code.
    See "systemctl status mosquitto.service" and "journalctl -xe" for details.


    pi@raspberrypi:~ $ systemctl status mosquitto.service --full --no-pager


    um zu prüfen, ob deine Serviceunit ok ist. Was sagt denn systemctl start mosquitto.service??

    Wenn das funktioniert, dann startest du zu früh. Du hast dich ja an einem anderen Thread angehangen. Schau doch einfach was ihm für den "after"-Eintrag vorgeschlagen wurde. Anscheinend hat das ja geklappt. Sonst wäre er wieder gekommen...

    Ich habe das file mal mit den Vorschlägen vom user rpi444 angepasst

    Code
    [Unit]
    Requires=network.target
    Code
    [Service]
    Type=idle

    Sieht dann so aus /lib/systemd/system/mosquitto.service


    pi@raspberrypi:~ $ sudo systemctl daemon-reload

    pi@raspberrypi:~ $ sudo systemctl start mosquitto.service

    pi@raspberrypi:~ $ sudo systemctl status mosquitto.service

    Einmal editiert, zuletzt von DeeZett (24. Mai 2023 um 10:23)

  • Moin DeeZett,

    also liegt es an deiner Serviceunit. Das starten der Serviceunit von Hand ist eigentlich immer der Test...

    Diese Datei etc/mosquitto/mosquitto.conf gibt es auch?

    Dann kann man noch testen, ob das mosquitto -c /etc/mosquitto/mosquitto.conf funktioniert.

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Hi,


    Diese Datei etc/mosquitto/mosquitto.conf gibt es auch?

    Wie im Eingangspost schon erwähnt.

    Der Inhalt von

    /etc/mosquitto/mosquitto.conf

    Dann kann man noch testen, ob das mosquitto -c /etc/mosquitto/mosquitto.conf funktioniert.

    Wie im Eingangspost schon erwähnt.

    Der Output von

    sudo /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

    Code
    1684704498: Loading config file /etc/mosquitto/conf.d/my_mosquitto.conf
    
    1684704498: Error: Unable to restore persistent database. Unrecognised file format.
    
    1684704498: Error: Couldn't open database.

    Habe es auch mit mosquitto -c /etc/mosquitto/mosquitto.conf getestet

    Derweilen hatte ich gestern meine custom config umbenannt von /etc/mosquitto/conf.d/my_mosquitto.conf in /etc/mosquitto/conf.d/default.conf weil ich dachte es könne vielleicht am Namen liegen.

    Wenn ich mit mosquitto -c /etc/mosquitto/conf.d/my_mosquitto.conf direkt auf mit meiner config starte, funktioniert es.

    Was mich zu der Idee brachte, das /lib/systemd/system/mosquitto.service mit dem Exec Start auf meine config zu verweisen.

    Quasi:

    Code
    [Service]
    Type=idle
    NotifyAccess=main
    ExecStart=/usr/sbin/mosquitto -c /etc/mosquitto/conf.d/default.conf
    ExecReload=/bin/kill -HUP $MAINPID
    Restart=on-failure
    ExecStartPre=/bin/mkdir -m 740 -p /var/log/mosquitto
    ExecStartPre=/bin/chown mosquitto /var/log/mosquitto
    ExecStartPre=/bin/mkdir -m 740 -p /run/mosquitto
    ExecStartPre=/bin/chown mosquitto /run/mosquitto

    Noch einmal systemctl daemon-reload und schon konnte ich den Service starten. Jetzt läuft er.
    Also muss es wirklich an dem globalen config file liegen /etc/mosquitto/mosquitto.conf

    Einmal editiert, zuletzt von DeeZett (24. Mai 2023 um 19:18)

  • Nachdem "wir" nun ausfindig gemacht haben, dass es am mosquitto.conf file liegen muss, habe ich ins man geschaut.

    Da gibt es einen Parameter persistence_file. Den habe ich jetzt in die config eingefügt mit dem entsprechenden Pfad der Datenbank.

    Anscheinend reicht der Parameter persistence_location nicht ("mehr") aus(./?) :D

    So sieht die mosquitto.conf jetzt aus.

    /etc/mosquitto/mosquitto.conf

    Code
    # Place your local configuration in /etc/mosquitto/conf.d/
    #
    # A full description of the configuration file is at
    # /usr/share/doc/mosquitto/examples/mosquitto.conf.gz
    pid_file /run/mosquitto/mosquitto.pid
    persistence true
    persistence_location /var/lib/mosquitto/
    persistence_file /var/lib/mosquitto/mosquitto.db
    log_dest file /var/log/mosquitto/mosquitto.log
    include_dir /etc/mosquitto/conf.d


    Funktioniert jetzt auch wieder.
    Der Vollständigkeit halber nochmal die aktuelle..

    /lib/systemd/system/mosquitto.service


    Danke an alle, die mir zu diesen Gedanken geholfen haben, damit ich das teste. :P<3

  • Das Changelog-Zitat war nur ein Hinweis für Rasp-Berlin

    Aber falsch, da auch noch in der Version "2.0.11-1" dieser Fehler vorhanden war.

    und wenn man sich ansieht, wie (weiter oben beschrieben) der Startprozess an den Dateirechten rumpfuscht, um das grade zu biegen, sieht man, dass das immer noch nicht wirklich gefixt ist.

    Der Installationsprozess sollte beim Installieren das Verzeichnis /run/mosquitto mit den passenden Rechten anlegen und nicht der Service-Startprozess die Fehler gradebiegen.

    Computer ..... grrrrrr

  • Der Installationsprozess sollte beim Installieren das Verzeichnis /run/mosquitto mit den passenden Rechten anlegen und nicht der Service-Startprozess die Fehler gradebiegen.

    Wenig sinnvoll, denn

    Code
    $ df -hT /run
    Filesystem     Type   Size  Used Avail Use% Mounted on
    tmpfs          tmpfs  2,4G  3,2M  2,4G   1% /run

    Wenn du nichts zu sagen hast, sag einfach nichts.

  • Moin DeeZett,

    das mag sein das es so aussieht das es funktioniert, aber ich glaube es nicht. Du umgehst nun die mosquitto.conf. Dort wird festgelegt wo deine Datenbank ist.

    Aus früheren Meldung ging hervor, das sie nicht in Ordnung ist.

    Ich habe bei mir mosquitto installiert und es geht alles per Default. Unter Umständen fliegt dir beim nächsten Upgrade alles wieder um die Ohren.

    Du hast mit deiner "Lösung" nur eine Umgehung geschaffen, aber nicht den Fehler gefunden.

    Ich hätte mir nun die defekte Datenbank wegkopiert und dann durch mosquitto eine neue leere Datenbank anlegen lassen.

    Dann hat man auch diese Fehlermeldung ausgeschlossen.

    Wenn es dich aber glücklich macht....

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Verstehe ich jetzt nicht so ganz. Wo umgehe ich die mosquitto.conf?

    Ich hab doch im mosquitto.service definiert...

    [Service]
    Type=notify
    NotifyAccess=main
    ExecStart=/usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf....

    Und in der mosquitto.conf ausschließlich den Parameter persistence_location hinzugefügt. Da ist nichts umgangen denke ich.

    Also meinst du besser wäre alte DB löschen und neue anlegen.

    Einmal editiert, zuletzt von DeeZett (25. Mai 2023 um 21:30)

  • Moin DeeZett,

    alles gut. Hatte deinen letzten Beitrag nicht richtig gelesen. SRI!!

    Viel Erfolg.

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Wenig sinnvoll, denn

    Code
    $ df -hT /run
    Filesystem     Type   Size  Used Avail Use% Mounted on
    tmpfs          tmpfs  2,4G  3,2M  2,4G   1% /run

    Dann sollte man als Entwickler das Start-Skript/Unit gleich von Anfang an Richtig bauen.

    Und in der mosquitto.conf ausschließlich den Parameter persistence_location hinzugefügt. Da ist nichts umgangen denke ich.

    In der /etc/mosquitto/monquitto.conf steht

    Was heißt, dass noch der INhalt aus dem in dem Verzeichnlis liegenden UNterverzeichnis conf.d eingelesen wird.

    Bei mir steht dort:

    Doch hauptsächlich startet der Service nicht, weil die mosquitto.pid-Datei nicht die passenden Rechte hat.

    Computer ..... grrrrrr

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!