Конфигурация Mosquitto 2.0 все еще не работает на Raspberry Pi

#raspberry-pi #mqtt #mosquitto

Вопрос:

Я запускаю сервер MQTT mosquitto версии 2.0.11 на том же Raspberry Pi Bullseye (3 A ), что и брокер, и клиент. У меня был рабочий код, но я понимаю, что для того, чтобы все заработало, нужно изменить файл .conf. Должно быть, я все еще чего-то не понимаю, потому что вот мое досье:

 # I had pid_file /run/mosquitto/mosquitto.pid below, but changed this when docs suggested below should be included if running automatically when device boots, which it will be. pid_file /var/run/mosquitto/mosquitto.pid  persistence true persistence_location /var/lib/mosquitto/  log_dest file /var/log/mosquitto/mosquitto.log  include_dir /etc/mosquitto/conf.d  listener 1883 allow_anonymous true  

Теперь, когда я пытаюсь запустить комаров вот так:

 mosquitto -c /etc/mosquitto/conf.d/mosquitto.conf  

Я получаю эту ошибку:

 1637370455: Loading config file /etc/mosquitto/conf.d/mosquitto.conf 1637370455: Error: Duplicate pid_file value in configuration. 1637370455: Error found at /etc/mosquitto/conf.d/mosquitto.conf:7. 1637370455: Error found at /etc/mosquitto/conf.d/mosquitto.conf:14.  

Строка 7-это pid_file /var/run/mosquitto/mosquitto.pid Строка 14-это include_dir /etc/mosquitto/conf.d

Я могу выполнять базовые тесты пабов и субтестов с помощью localhost, но все равно не везет с именем хоста. Да, я знаю, что вы должны использовать безопасность, но у меня есть приложение, которое управляет роботом через локальный Wi-Fi, и я хочу сохранить использование приложения, не изменяя и этот компонент.

Любая помощь в том, чтобы вернуть меня на путь к тому, чтобы брокер и клиент Mosquitto работали с одним и тем же ип, предоставляли анонимный доступ и работали, очень ценится. Я просмотрел документы, пример файла и проконсультировался с другими учебными пособиями, такими как у Стива, но правильная конфигурация все еще неясна. Тх!

Комментарии:

1. Проверьте файлы в include_dir другой pid_file строке!

2. Тнх. У меня там только mosquitto.conf и README. Я прокомментировал строку включения, но затем я получаю ошибку в строке PID. Затем при запуске: mosquitto-c /etc/mosquitto/conf.d/mosquitto.conf я получаю 1637421962: Ошибка: Не удалось записать pid-файл. Также прокомментировал строку PID, но получил: 1637422031: Ошибка: Не удалось открыть файл журнала /var/log/mosquitto/mosquitto.log для записи. Однако, похоже, в этот момент сервер работает, потому что я не возвращаюсь к приглашению. Есть какие-нибудь мысли о том, как избавиться от ошибки?

3. Также интересно, как заставить mosquitto автоматически использовать этот файл .conf при загрузке. Я запускал mosquitto автоматически с помощью: sudo systemctl включить mosquitto.service, но это не включает автоматический запуск файла conf, например: mosquitto-c /etc/mosquitto/conf.d/mosquitto.conf. Есть идеи, как исправить?

Ответ №1:

Во-первых, ошибки, связанные с невозможностью открыть файлы pid или журнала, связаны с тем, что вы используете mosquitto как обычный пользователь (возможно, pi). У этого пользователя нет разрешения на чтение/запись в файл /var/run или /var/log , следовательно, сбой при попытке запустить его «вручную».

Вы не сказали, как вы установили 2.0.11, так как версия по умолчанию в комплекте с Bullseys по-прежнему является сборкой 1.5.x. Предполагая, что вы использовали mosquitto.org репозиторий, после чего служба mosquitto будет установлена и настроена. Он автоматически подберет конфигурационный файл по умолчанию /etc/mosquitto/mosquitto.conf по адресу, который должен отображаться с:

 $ sudo service mosquitto status ● mosquitto.service - Mosquitto MQTT Broker  Loaded: loaded (/lib/systemd/system/mosquitto.service; enabled; vendor preset  Active: active (running) since Sun 2021-10-31 17:28:52 GMT; 2 weeks 5 days ag  Docs: man:mosquitto.conf(5)  man:mosquitto(8)  Process: 499 ExecStartPre=/bin/mkdir -m 740 -p /var/log/mosquitto (code=exited  Process: 505 ExecStartPre=/bin/chown mosquitto /var/log/mosquitto (code=exited  Process: 507 ExecStartPre=/bin/mkdir -m 740 -p /run/mosquitto (code=exited, st  Process: 510 ExecStartPre=/bin/chown mosquitto /run/mosquitto (code=exited, st  Process: 25679 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCE  Main PID: 511 (mosquitto)  Tasks: 1 (limit: 2181)  CGroup: /system.slice/mosquitto.service  └─511 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf  Nov 19 00:00:10 www systemd[1]: Reloading Mosquitto MQTT Broker. Nov 19 00:00:10 www systemd[1]: Reloaded Mosquitto MQTT Broker. Warning: Journal has been rotated since unit was started. Log output is incomple  

Самый простой способ разрешить доступ с других компьютеров-это выполнить следующее:

  • Сбросьте файл конфигурации по умолчанию в то состояние, в котором он был при установке
     # Place your local configuration in /etc/mosquitto/conf.d/  #  # A full description of the configuration file is at  # /usr/share/doc/mosquitto/examples/mosquitto.conf.example   pid_file /var/run/mosquitto/mosquitto.pid   persistence true  persistence_location /var/lib/mosquitto/   log_dest file /var/log/mosquitto/mosquitto.log   port 1883   include_dir /etc/mosquitto/conf.d  
  • создайте новый файл, /etc/mosquitto/conf.d например, под названием connect.conf
     listener 1883   allow_anonymous true  
  • перезапустите службу с помощью sudo service mosquitto restart

Комментарии:

1. Это сработало идеально. Большое спасибо, что нашли время дать исчерпывающий ответ. Я преподаю курс физических вычислений, и переход на 2.0 привел к сбою приложения, которое мы использовали для создания роботов, управляемых MQTT. Из документов не было ясно, как связаны эти два файла .conf. Ты самый лучший. Пожелайте, чтобы большинство участников последовали вашему ответу по качеству золотого стандарта. Мир!