wb_editors
902
правки
Brainroot (обсуждение | вклад) (Ну так же проще...) |
|||
(не показано 5 промежуточных версий 1 участника) | |||
Строка 7: | Строка 7: | ||
Проблема вызвана не оборудованием или программным обеспечением, разработанным компанией Wiren Board, а является следствием бага в MQTT-брокере mosquitto, [[MQTT | используемом]] в контроллере: [https://github.com/eclipse/mosquitto/issues/389 Unexpected growth in the .db file]. | Проблема вызвана не оборудованием или программным обеспечением, разработанным компанией Wiren Board, а является следствием бага в MQTT-брокере mosquitto, [[MQTT | используемом]] в контроллере: [https://github.com/eclipse/mosquitto/issues/389 Unexpected growth in the .db file]. | ||
Эта проблема связана с | Эта проблема связана с локальной базой брокера, который в оригинале называется persistence file. | ||
Если брокер mosquitto не может отправить сообщение кому-то из подключенных клиентов, то он сохраняет сообщение в оперативной памяти. Например, это может случиться, когда настроена пересылка сообщений на другой брокер, подключенный через bridge, но внезапно пропала связь. Когда связь восстановится, сообщения из оперативной памяти будут отправлены. | |||
Однако, если за время отсутствия связи сервис mosquitto был перезапущен,например, если выключался контроллер — эти данные будут утеряны. Чтобы не допустить утерю данных, брокер mosquitto может сохранять такие сообщения не только в оперативную память, но и на накопитель в свою базу данных, откуда потом загрузит информацию при следующем запуске. Подробнее в статье [https://pagefault.blog/2020/02/05/how-to-set-up-persistent-storage-for-mosquitto-mqtt-broker/ How to set up persistent storage for Mosquitto MQTT broker]. | |||
Проверить размер | Базу данных для отложенных сообщения можно включать или выключать в настройках mosquitto. На контроллерах Wiren Board он по умолчанию включен. | ||
Из-за ошибки в коде mosquitto pбаза данных брокера может вырастать до размера 50 Мбайт и более, хотя при нормальной работе он обычно меньше 25 Мбайт. При следующем запуске mosquitto не может обработать такой большой файл и в итоге не запускается. Из-за этого также перестают работать работать веб-интерфейс и отправка MQTT-сообщений. | |||
Ещё база данных брокера большого размера может занять всё свободное место на разделе, из-за чего может перестать работать другой софт контроллера, в том числе VPN и SSH. Также в некоторых версиях ПО контроллера за статусом сервиса mosquitto следил [[watchdog]], и из-за того, что сервис не запускался, watchdog перезапускал контроллер. | |||
Проверить размер базы данных брокера можно командой <code>du -h /var/lib/mosquitto/mosquitto.db</code>. | |||
'''Пути обхода''' | |||
Чтобы вернуть контроллер в рабочее состояние: | |||
# Удалите файл с базой данных брокера (persistence file). Это можно сделать любым способом, но так как ПО контроллера, включая SSH, может работать медленно из-за недостатка свободного места, удобнее всего это сделать с помощью [[WB_Debug_Console |отладочной консоли]]: <code>rm /var/lib/mosquitto/mosquitto.db</code>. Если из-за проблем в работе контроллера у вас не получается удалить эту базу, можете [[Wiren_Board_7_Firmware_Update | выполнить factory reset]]. | |||
# В <code>/etc/mosquitto/mosquitto.conf</code> отключите функцию сохранения неотправленных сообщений в файл, для этого: | |||
## Откройте файл в редакторе: | |||
##:<syntaxhighlight lang="bash"> | |||
nano /etc/mosquitto/mosquitto.conf | |||
</syntaxhighlight> | |||
## Поменяйте <code>persistence true</code> на <code>persistence false</code>. | |||
# Перезапустите контроллер. | |||
# Ещё раз удалите файл с базой данных брокера. | |||
Либо:<syntaxhighlight lang="bash"> | |||
sed -i 's$^persistence true$persistence false$' /etc/mosquitto/mosquitto.conf && systemctl restart mosquitto | |||
</syntaxhighlight> | |||
Важно! При обновлении ПО контроллера файл <code>/etc/mosquitto/mosquitto.conf</code> будет заменён на дефолтный, поэтому снова установите <code>persistence false</code>. | |||
С отключенной функция сохранения неотправленных сообщений в файл, эта проблема не будет возникать. Однако в редких случаях, описанных в разделе «Причины и подробное описание», некоторые MQTT-сообщения могут быть не доставлены. | |||
'''Исправление''' | |||
По заявлениям разработчиков стороннего софта mosquitto, они исправили этот баш ещё в mosquitto версии 1.5.6. В Debian 11 «bullseye» включен mosquitto версии 2.0.7-3 и старше, поэтому там этого бага быть не должно. | |||
Однако, проблема есть и пока мы её исследуем, рекомендуем отключить функцию сохранения неотправленных сообщений в файл по инструкции в разделе «Пути обхода». |