mosquitto -v -p 1888 -c /etc/mosquitto/mosquitto.conf 1751247300: mosquitto version 1.6.9 starting 1751247300: Config loaded from /etc/mosquitto/mosquitto.conf. 1751247300: Opening ipv4 listen socket on port 1888. 1751247300: Error: Address already in use
时间: 2025-07-05 21:01:44 浏览: 12
当启动 Mosquitto MQTT 代理时遇到 `Address already in use` 错误,通常表明指定的端口(如 1888)已被其他进程占用。以下是解决该问题的步骤:
### 检查端口占用情况
首先,确认是哪个进程占用了 1888 端口。可以通过以下命令查看:
```bash
sudo netstat -tulnp | grep :1888
```
如果系统中没有安装 `netstat`,可以使用 `ss` 命令代替:
```bash
sudo ss -tulnp | grep :1888
```
上述命令将列出绑定到 1888 端口的进程及其 PID(进程标识符)。
### 终止占用端口的进程
如果确认该端口被不必要的进程占用,可以使用 `kill` 命令终止该进程。假设查找到的进程 PID 为 `1234`,则执行:
```bash
sudo kill -9 1234
```
请注意,强制终止进程可能会导致数据丢失或其他异常行为,请确保该进程不是关键服务[^2]。
### 修改 Mosquitto 配置文件中的监听端口
如果不想终止当前占用 1888 端口的进程,或者希望 Mosquitto 使用其他端口,可以修改其配置文件 `/etc/mosquitto/mosquitto.conf` 中的监听端口设置:
```bash
sudo nano /etc/mosquitto/mosquitto.conf
```
找到如下行并修改端口号(例如改为 1889):
```
listener 1888
```
更改为:
```
listener 1889
```
保存并退出编辑器后,重新启动 Mosquitto 服务:
```bash
sudo systemctl restart mosquitto
```
### 验证 Mosquitto 是否成功启动
使用以下命令检查 Mosquitto 的状态以确认是否已成功启动:
```bash
sudo systemctl status mosquitto
```
也可以通过尝试连接新配置的端口来验证服务是否正常运行:
```bash
mosquitto_sub -h localhost -t "test/topic" -p 1889
```
在另一个终端窗口发布消息进行测试:
```bash
mosquitto_pub -h localhost -t "test/topic" -m "Hello MQTT" -p 1889
```
如果一切正常,消息应能成功发布和接收[^5]。
---
###
阅读全文