MQTT 재연결 버그 (부팅 후 PTZ/명령 미동작)
출처: raw/troubleshooting/2026-04-17_known-issues.md 마지막 갱신: 2026-04-17
증상
- 장비 재부팅 후 PTZ 명령, 설정 변경 등 모든 플랫폼 명령 미반응
- edge-settings 프로세스는 정상 실행 중
sudo ss -tnp state established | grep 1883결과 없음 (MQTT 연결 없음)
원인
settings_handler.py의 start_mqtt()에서 최초 connect() 실패 시
예외 catch 후 _mqtt_client = None으로 설정 → 이후 재시도 없음.
부팅 초기 네트워크 준비 전에 connect() 실패하면 영구 미연결 상태.
해결
start_mqtt()를 백그라운드 재시도 루프로 교체:
def start_mqtt():
global _mqtt_client
_mqtt_client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
_mqtt_client.reconnect_delay_set(min_delay=5, max_delay=60)
_mqtt_client.loop_start()
def _initial_connect():
delay = 5
while True:
try:
_mqtt_client.connect(BROKER_HOST, BROKER_PORT)
return
except Exception as e:
time.sleep(delay)
delay = min(delay * 2, 60)
threading.Thread(target=_initial_connect, daemon=True).start()즉각 조치
sudo systemctl restart edge-settings
# 재시작 후 MQTT 연결 확인
sudo ss -tnp state established | grep 1883재발 방지
- MQTT client는 항상
loop_start()+ 백그라운드 재연결 스레드 패턴 reconnect_delay_set으로 paho-mqtt 자체 재연결도 활성화