Mosquitto auf Raspberry Pi verweigert die Verbindung, nachdem die Protokolleinstellungen geändert wurden

12

In meinen fortwährenden Bemühungen, meinen Raspberry Pi dazu zu bringen, meine Aufgaben zu übernehmen, habe ich einen Mosquitto MQTT-Broker eingerichtet. In den Grundeinstellungen lief alles einigermaßen gut.

Ich könnte Testnachrichten mit dem Befehl "publish" veröffentlichen und sie mit dem Befehl "subscribe" empfangen. Dann habe ich beschlossen, die Log-Ebene zu erhöhen und die Datei mosquitto.conf wie folgt zu modifizieren. Die Version mit im Wesentlichen dem gesamten auskommentierten Protokollabschnitt funktioniert. Der andere nicht.

Ich habe es auf die Zeile mit der Protokolldatei eingegrenzt.

$ diff mosquitto.conf mosquitto.conf.old
408,410c408,410
< #log_dest file /var/log/mosquitto/mosquitto.log
---
> log_dest file /var/log/mosquitto/mosquitto.log

Die Datei existiert und gehört mosquitto:mosquittodem Benutzer, der den Dienst ausführt.

Die sehr hilfreiche Meldung, die ich beim Versuch der Protokollierung erhalte, lautet wie folgt:

mosquitto_pub -h localhost -t thisisme -m 5
Error: Connection refused

Inzwischen bin ich mir sicher, dass der Dienst eines stillen Todes stirbt.

$ sudo service mosquitto status
 mosquitto.service - LSB: mosquitto MQTT v3.1 message broker
   Loaded: loaded (/etc/init.d/mosquitto)
   Active: active (exited) since Fri 2017-01-06 11:16:38 CET; 4min 24s ago
  Process: 2222 ExecStop=/etc/init.d/mosquitto stop (code=exited, status=0/SUCCESS)
  Process: 2230 ExecStart=/etc/init.d/mosquitto start (code=exited, status=0/SUCCESS)

Jan 06 11:16:38 T-Pi mosquitto[2230]: Starting network daemon:: mosquitto.
Jan 06 11:16:38 T-Pi systemd[1]: Started LSB: mosquitto MQTT v3.1 message broker.

Ich verwende Raspbian GNU / Linux 8 (Jessie) mit den folgenden Moskito-Paketen:

libmosquitto1/stable,now 1.3.4-2 armhf [installed,automatic]
mosquitto/stable,now 1.3.4-2 armhf [installed]
mosquitto-clients/stable,now 1.3.4-2 armhf [installed]
python-mosquitto/stable,now 1.3.4-2 all [installed]

Weitere Kommentar angeforderte Informationen:

ls -ld /var /var/log /var/log/mosquitto /var/log/mosquitto/mosquitto.log
drwxr-xr-x 11 root      root       4096 Sep 23 06:02 /var
drwxr-xr-x  8 root      root       4096 Jan  6 21:07 /var/log
drwxr-xr-x  2 mosquitto mosquitto  4096 Jan  5 14:36 /var/log/mosquitto
-rw-r--r--  1 mosquitto mosquitto 14233 Jan  6 21:07 /var/log/mosquitto/mosquitto.log

Die einzige Protokolldatei in / var / log, die geändert wird, ist die Datei auth.log von meinem sudo.

Was habe ich gebrochen?

Helmar
quelle
Gibt es überhaupt etwas geschrieben /var/log/mosquitto/mosquitto.log?
Aurora0001
1
@ Aurora0001 nichts im Zusammenhang mit diesem Verbindungsversuch, nein
Helmar
Welches Betriebssystem? Welche Version von Moskito?
Ghanima
@Ghanima hat die Information hinzugefügt
Helmar
Können Sie versuchen, es auf die alte Konfigurationsdatei zurückzusetzen und zu überprüfen? Sehr dumm: Überprüfen Sie Moskitto Status Log
Bravokeyl

Antworten:

8

Eine Möglichkeit, dies zu debuggen, besteht darin, mosquitto manuell mit den gleichen Optionen auszuführen, die Ihr Init-System verwendet, und sich dann die Ausgabe anzusehen. Beispielsweise:

mosquitto -v -c <path to config file>

Durch -vdas Hinzufügen wird sichergestellt, dass Sie unabhängig von den Einstellungen der Konfigurationsdatei eine ausführliche Protokollierung haben.

ralight
quelle
3
Das hat geholfen, anscheinend gibt es eine zweite mosquitto.conf in / etc / mosquitto, die die enthält, die ich in /etc/mosquitto/conf.d/ verwendet habe. In dieser ersten Datei war bereits die Standardprotokolldatei festgelegt. So wird ein Fehler erzeugt: Duplizieren Sie den Wert "log_dest file". Dadurch konnte der Dienst nicht ordnungsgemäß gestartet werden. Irgendwie ist dieser Fehler beim normalen Starten des Dienstes nicht aufgetreten.
Helmar
6

Unter Arch Linux (4.4.37-1-ARCH) mit mosquitto 1.4.10-2und einer vorhandenen Protokolldatei / einem vorhandenen Pfad mit entsprechenden Berechtigungen kann ich diesen Fehler nicht reproduzieren.

/var/log/mosquitto $ ls -l
-rw-r--r-- 1 mosquitto root 7832 Jan 5 18:15 mosquitto.log

Wenn die Berechtigungen der Protokolldatei jedoch unterschiedlich sind oder nicht vorhanden sind und die Verzeichnisberechtigung Moskitto das Schreiben nicht zulässt, schlägt das Starten des Broker-Daemons fehl. Was dann Error: Connection refusedbeim Veröffentlichen oder Abonnieren von Themen dazu führt. Zumindest stirbt der Dienst nicht an einem stillen Tod, sondern kündigt ihn gut im Syslog an.

Kurz gesagt, mit dem Verzeichnis, /var/log/mosquittodas dem Benutzer von mosquitto gehört und von ihm beschreibbar ist, funktioniert eine log_dest file [...]Zeile in der Konfiguration von mosquitto einwandfrei.

Ghanima
quelle
6

Die Log - Verzeichnis / Datei sollte sein Eigentum durch den mosquittoBenutzer oder der Benutzer , dass Sie Setup in der Conf - Datei und die Gruppe haben. Ich habe es mit zwei conf-Dateien versucht, eine mit out log_dest file /var/log/mosquitto/mosquitto.logund eine mit log destination to file.

Auf meinem Server läuft Mosquitto mit mosquittoUser.

Mit log_dest file /var/log/mosquitto/mosquitto.logBesitz von rootBenutzer arbeitet nicht mit Dienststatusfehler. Dies könnte wahrscheinlich auch für Sie der Fall sein. Überprüfen Sie das, service statusnachdem Sie log_dest hinzugefügt haben.

Ich habe versucht, den Besitzer des /var/log/mosquittoOrdners in zu ändern mosquitto.

sudo chown -R mosquitto:mosquitto /var/log/mosquitto

Dann startete der Dienst. Es funktioniert jetzt gut.

bravokeyl
quelle
Ich hatte die Datei zuvor dem Benutzer gehört, jetzt habe ich auch eine Gruppe erstellt und die Berechtigungen wie vorgeschlagen geändert, aber kein Glück.
Helmar
@Helmar hmm! das ist merkwürdig. Nachdem Sie die Gruppe geändert haben, haben Sie den Dienst neu gestartet oder gestartet?
Bravokeyl
@Helmar Kannst du nochmal überprüfen, ob das Log-Zielverzeichnis existiert (du hast es erstellt)?
Bravokeyl
Sowohl die Datei als auch das Verzeichnis existieren und sind Eigentum von mosquitto: mosquitto
Helmar