Come posso avviare il broker Mosquitto MQTT all'avvio in Ubuntu 16.04


10

Sto cercando di eseguire un broker Mosquitto MQTT su Ubuntu 16.04. Ho le istruzioni dal 14.04, ma dal 16.04 non utilizza più l'avvio, non riesco a capire come convertire in systemd.

Ecco i comandi per 14.04:

description "Mosquitto MQTT broker"
start on net-device-up
respawn
exec /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

MODIFICARE:

Questo è quello che ho fatto finora. Quando riavvio ed systemctl status mosquitto.serviceeseguo, mostro che mosquitto è caricato ma non attivo:

[Unit]
Description=Mosquitto MQTT Broker

[Service]
WorkingDirectory=/usr/sbin/mosquitto
ExecStart=/etc/mosquitto/mosquitto.conf
Restart=always

[Install]
WantedBy=multi-user.target

MODIFICA 2:

Ran sudo systemctl enable mosquitto.service. Ora il codice di uscita dell'errore è:

Process: 1720 ExecStart=/etc/mosquitto/mosquitto.conf (code=exited, status=200/CHDIR)

Risposte:


9

L'installazione sudo apt install mosquittosu 16.04aggiunge lo /etc/init.d/mosquittoscript. systemd usa quello script per generare /run/systemd/generator.late/mosquitto.service, e questo è ciò che dice:

# Automatically generated by systemd-sysv-generator

[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/init.d/mosquitto
Description=LSB: mosquitto MQTT v3.1 message broker
Before=multi-user.target
Before=multi-user.target
Before=multi-user.target
Before=graphical.target
Before=shutdown.target
After=remote-fs.target
After=systemd-journald-dev-log.socket
Conflicts=shutdown.target

[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
ExecStart=/etc/init.d/mosquitto start
ExecStop=/etc/init.d/mosquitto stop
ExecReload=/etc/init.d/mosquitto reload

Guardarci dentro /etc/init.d/mosquittoci dice questo

/usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf è già eseguito di default

Quindi inserisci la tua configurazione /etc/mosquitto/conf.d(a cui fa riferimento mosquitto.conf) e divertiti .


Essendo un normale servizio systemd, puoi:

  • systemctl status mosquitto per vedere il suo stato attuale
  • sudo systemctl (start|stop) mosquitto per modificare lo stato della sessione corrente
  • sudo systemctl (enable|disable) mosquitto modificare il comportamento all'avvio (senza influire sullo stato corrente)

In che modo quel file ti dice che mosquitto è in esecuzione -c option?
Petrus Theron,

@PetrusTheron è quello che succede nel /etc/init.d/mosquittofile con l' startargomento.
Mihail Malostanidis,

La mia configurazione all'interno della /etc/mosquitto/conf.ddirectory sembra essere ignorata. Come posso rigenerarmi /run/systemd/generator.late/mosquitto.service?
chris,

@chris forse non si fa riferimento /etc/mosquitto/mosquitto.conf? Cosa c'è dentro?
Mihail Malostanidis,

0

I file ExecStart=e le WorkingDirectory=linee dell'unità sono completamente errati. Stai cercando di avviare un file di configurazione, usando il file eseguibile (!) Come directory di lavoro?

Se capisco correttamente, il file di unità corretto sarebbe:

[Unit]
Description=Mosquitto MQTT Broker
After=network.target

[Service]
ExecStart=/usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
Restart=always

[Install]
WantedBy=multi-user.target

Inoltre, non confondere l'avvio e l'abilitazione dell'unità. Leggi le mie risposte simili su questo:


0

Assicurati di avere mosquitto in esecuzione:

ps -aux | grep mosquitto

E hai questo in default.conf :

listener 1883
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.