#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. Ты самый лучший. Пожелайте, чтобы большинство участников последовали вашему ответу по качеству золотого стандарта. Мир!