更改日志设置后,Raspberry Pi 上的 Mosquitto 拒绝连接

物联网 MQTT 树莓派 蚊子
2021-06-06 23:59:06

在我不断努力让我的 Raspberry Pi 控制我的东西的过程中,我建立了一个 Mosquitto MQTT 代理。在基本设置中,一切都进行得相当顺利。

我可以使用发布命令发布测试消息并使用订阅命令接收它们。然后我决定提高日志级别并按如下方式修改 mosquitto.conf 文件。基本上将整个日志部分注释掉的版本有效。另一个没有。

我把它缩小到日志文件那一行。

$ diff mosquitto.conf mosquitto.conf.old
408,410c408,410
< #log_dest file /var/log/mosquitto/mosquitto.log
---
> log_dest file /var/log/mosquitto/mosquitto.log

该文件存在并归mosquitto:mosquitto运行该服务的用户所有

我在尝试日志记录时得到的非常有用的消息如下:

mosquitto_pub -h localhost -t thisisme -m 5
Error: Connection refused

到现在为止,我确信这项服务会悄无声息地死去。

$ sudo service mosquitto status
● mosquitto.service - LSB: mosquitto MQTT v3.1 message broker
   Loaded: loaded (/etc/init.d/mosquitto)
   Active: active (exited) since Fri 2017-01-06 11:16:38 CET; 4min 24s ago
  Process: 2222 ExecStop=/etc/init.d/mosquitto stop (code=exited, status=0/SUCCESS)
  Process: 2230 ExecStart=/etc/init.d/mosquitto start (code=exited, status=0/SUCCESS)

Jan 06 11:16:38 T-Pi mosquitto[2230]: Starting network daemon:: mosquitto.
Jan 06 11:16:38 T-Pi systemd[1]: Started LSB: mosquitto MQTT v3.1 message broker.

我正在使用以下 mosquitto 软件包运行Raspbian GNU/Linux 8 (jessie)

libmosquitto1/stable,now 1.3.4-2 armhf [installed,automatic]
mosquitto/stable,now 1.3.4-2 armhf [installed]
mosquitto-clients/stable,now 1.3.4-2 armhf [installed]
python-mosquitto/stable,now 1.3.4-2 all [installed]

进一步评论要求的信息:

ls -ld /var /var/log /var/log/mosquitto /var/log/mosquitto/mosquitto.log
drwxr-xr-x 11 root      root       4096 Sep 23 06:02 /var
drwxr-xr-x  8 root      root       4096 Jan  6 21:07 /var/log
drwxr-xr-x  2 mosquitto mosquitto  4096 Jan  5 14:36 /var/log/mosquitto
-rw-r--r--  1 mosquitto mosquitto 14233 Jan  6 21:07 /var/log/mosquitto/mosquitto.log

/var/log 中唯一被修改的日志文件是我的 sudo 中的 auth.log。

我打破了什么?

3个回答

调试此问题的一种方法是使用与 init 系统使用的选项相同的选项手动运行 mosquitto,然后查看输出。例如:

mosquitto -v -c <path to config file>

添加-v将确保您拥有详细的日志记录,无论配置文件设置如何。

在 Arch Linux (4.4.37-1-ARCH)mosquitto 1.4.10-2和具有权限的现有日志文件/路径上,我无法重现此错误。

/var/log/mosquitto $ ls -l
-rw-r--r-- 1 mosquitto root 7832 Jan 5 18:15 mosquitto.log

但是,如果日志文件的权限不同,或者它不存在并且目录权限不允许 mosquitto 写入它,则启动代理守护程序将失败。这将导致Error: Connection refused发布或订阅主题。至少该服务不会无声无息地死去,而是在系统日志中很好地宣布了它。

简而言之,对于/var/log/mosquittomosquitto 用户拥有和可写的目录log_dest file [...],mosquitto 配置中一行就可以正常工作。

日志目录/文件应该拥有mosquitto用户或你在conf文件和组设置用户。我尝试了两个 conf 文件,一个是 out log_dest file /var/log/mosquitto/mosquitto.log,一个是日志目的地到文件。

在我的服务器上,Mosquitto 与mosquitto用户一起运行

凭借log_dest file /var/log/mosquitto/mosquitto.log所拥有的root用户没有使用服务状态错误的工作。这可能也适用于您。service status添加 log_dest 后检查

我尝试将/var/log/mosquitto文件夹的所有权更改mosquitto.

sudo chown -R mosquitto:mosquitto /var/log/mosquitto

然后启动了服务。它现在工作正常。