Como faço para iniciar o broker Mosquitto MQTT na inicialização no Ubuntu 16.04

6

Estou tentando executar um broker Mosquitto MQTT no Ubuntu 16.04. Eu tenho instruções de 14.04, mas desde 16.04 não usa mais inicialização, não consigo descobrir como converter para systemd.

Aqui estão os comandos para 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 eu tenho até agora. Quando eu reiniciar e executar systemctl status mosquitto.service , mostro que o mosquitto 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 de erro é:

Process: 1720 ExecStart=/etc/mosquitto/mosquitto.conf (code=exited, status=200/CHDIR)
    
por pekasus 21.08.2016 / 22:53

2 respostas

5

a instalação de sudo apt install mosquitto on 16.04 adiciona o script /etc/init.d/mosquitto . 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

Significa que

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

Então apenas coloque sua configuração em /etc/mosquitto/conf.d (referenciada por mosquitto.conf) e aproveite.

    
por Mihail Malostanidis 08.03.2017 / 13:58
0

As linhas ExecStart= e WorkingDirectory= do seu arquivo de unidade estão completamente erradas. 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 adequado 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 combine a partida e a habilitação da unidade. Leia minhas respostas semelhantes sobre isso:

por intelfx 23.08.2016 / 22:05

Tags