Как запустить брокер Mosquitto MQTT при запуске в Ubuntu 16.04

10

Я пытаюсь запустить Mosquitto MQTT Broker в Ubuntu 16.04. У меня есть инструкции от 14.04, но поскольку 16.04 больше не использует автозагрузку, я не могу понять, как конвертировать в systemd.

Вот команды на 14.04:

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

РЕДАКТИРОВАТЬ:

Это то, что я дошел до сих пор. Когда я перезагружаюсь и запускаюсь, systemctl status mosquitto.serviceя показываю, что москит загружен, но не активен:

[Unit]
Description=Mosquitto MQTT Broker

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

[Install]
WantedBy=multi-user.target

РЕДАКТИРОВАТЬ 2:

Ран sudo systemctl enable mosquitto.service. Теперь код выхода ошибки:

Process: 1720 ExecStart=/etc/mosquitto/mosquitto.conf (code=exited, status=200/CHDIR)
pekasus
источник

Ответы:

9

Установка sudo apt install mosquittoна 16.04добавляет /etc/init.d/mosquittoскрипт. systemd использует этот скрипт для генерации /run/systemd/generator.late/mosquitto.service, и вот что он говорит:

# 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

Взгляд внутрь /etc/init.d/mosquittoговорит нам, что

/usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf по умолчанию уже запущен

Так что просто поместите ваш конфиг в /etc/mosquitto/conf.d(ссылается на mosquitto.conf) и наслаждайтесь .


Будучи обычным сервисом systemd, вы можете:

  • systemctl status mosquitto чтобы увидеть его текущее состояние
  • sudo systemctl (start|stop) mosquitto изменить статус текущего сеанса
  • sudo systemctl (enable|disable) mosquitto изменить поведение при запуске (без влияния на текущее состояние)
Михаил Малостанидис
источник
Как этот файл говорит вам, что с москитом бегают -c option?
Петрус Терон
@PetrusTheron это то, что происходит в /etc/init.d/mosquittoфайле с startаргументом.
Михаил Малостанидис
Мой конфиг внутри /etc/mosquitto/conf.dдиректории, похоже, игнорируется. Как я могу восстановить /run/systemd/generator.late/mosquitto.service?
Крис
@ Крис, может быть, это не упоминается в /etc/mosquitto/mosquitto.conf? Что там?
Михаил Малостанидис
0

Файл ExecStart=и WorkingDirectory=строки вашего модуля совершенно неверны. Вы пытаетесь запустить файл конфигурации, используя исполняемый файл (!) В качестве рабочего каталога?

Если я правильно понимаю, правильный файл модуля будет:

[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

Также, пожалуйста, не объединяйте запуск и включение устройства. Прочитайте мои похожие ответы об этом:

intelfx
источник
0

Убедитесь, что у вас есть комар работает:

ps -aux | grep mosquitto

И у вас есть это в default.conf :

listener 1883
Исмаил Явуз
источник