Como inicio o broker do Mosquitto MQTT na inicialização no Ubuntu 16.04

10

Estou tentando executar um Mosquitto MQTT Broker no Ubuntu 16.04. Tenho instruções do 14.04, mas como o 16.04 não usa mais a inicialização, não consigo descobrir como converter para systemd.

Aqui estão os comandos para o 14.04:

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

EDITAR:

Isso é o que cheguei até agora. Quando eu reinicio e executo systemctl status mosquitto.service, mostro que o mosquito está carregado, mas não ativo:

[Unit]
Description=Mosquitto MQTT Broker

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

[Install]
WantedBy=multi-user.target

EDIT 2:

Ran sudo systemctl enable mosquitto.service. Agora, o código de saída do erro é:

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

Respostas:

9

Instalar sudo apt install mosquittono 16.04adiciona o /etc/init.d/mosquittoscript. O systemd usa esse script para gerar /run/systemd/generator.late/mosquitto.service, e é isso que diz:

# 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

Olhar para dentro /etc/init.d/mosquittonos diz que

/usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf já está sendo executado por padrão

Então basta colocar sua configuração em /etc/mosquitto/conf.d(referenciada por mosquitto.conf) e aproveitar .


Sendo um serviço systemd regular, você pode:

  • systemctl status mosquitto para ver seu status atual
  • sudo systemctl (start|stop) mosquitto para alterar o status da sessão atual
  • sudo systemctl (enable|disable) mosquitto alterar o comportamento de inicialização (sem afetar o estado atual)
Mihail Malostanidis
fonte
Como esse arquivo diz que o mosquito está sendo executado -c option?
Petrus Theron
@PetrusTheron é o que acontece no /etc/init.d/mosquittoarquivo com o startargumento.
Mihail Malostanidis
Minha configuração dentro do /etc/mosquitto/conf.ddiretório parece ser ignorada. Como posso me regenerar /run/systemd/generator.late/mosquitto.service?
chris
@chris talvez não esteja relacionado /etc/mosquitto/mosquitto.conf? O que tem lá?
Mihail Malostanidis 23/09/19
0

O arquivo ExecStart=e as WorkingDirectory=linhas da sua unidade estão completamente errados. Você está tentando iniciar um arquivo de configuração, usando o arquivo executável (!) Como seu diretório de trabalho?

Se eu entendi corretamente, o arquivo de unidade apropriado seria:

[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

Além disso, não confunda a partida e a ativação da unidade. Leia minhas respostas semelhantes sobre isso:

intelfx
fonte
0

Certifique-se de ter o mosquito em execução:

ps -aux | grep mosquitto

E você tem isso no default.conf :

listener 1883
İsmail Yavuz
fonte