我可以使用publish命令发布测试消息,并使用subscription命令接收测试消息。然后,我决定提高日志级别,并如下修改了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.
我正在运行Raspbian GNU / Linux 8(jessie),以下mosquitto软件包:
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。
我打破了什么?
#1 楼
一种调试方法是手动运行mosquitto,并使用与您的init系统相同的选项,然后查看输出。例如:mosquitto -v -c <path to config file>
添加
-v
将确保您有冗长的日志记录,无论配置文件设置如何。评论
这很有帮助,显然在/ etc / mosquitto中还有另一个mosquitto.conf,其中包括我在/etc/mosquitto/conf.d/中使用的那个。该第一个文件已经设置了该标准日志文件。因此创建一个错误:复制“ log_dest文件”值。这导致服务无法正常启动。使用常规的服务启动例程时,该错误不会消失。
– Helmar♦
17年1月9日在10:01
#2 楼
在具有mosquitto 1.4.10-2
和具有这样的权限的现有日志文件/路径的Arch Linux(4.4.37-1-ARCH)上,我无法重现此错误。 /var/log/mosquitto $ ls -l
-rw-r--r-- 1 mosquitto root 7832 Jan 5 18:15 mosquitto.log
如果日志文件的权限不同,或者不存在,并且目录权限不允许mosquitto写入,则启动代理守护程序失败。然后,在发布或订阅主题时会导致
Error: Connection refused
。至少该服务不会死于无声死亡,但会在syslog中很好地宣布它。简而言之,对于mosquitto用户拥有并可由其写入的目录/var/log/mosquitto
,mosquitto的配置中的log_dest file [...]
行可以正常工作。 #3 楼
日志目录/文件应属于mosquitto
用户或在conf文件和组中设置的用户所有。我尝试了两个conf文件,一个没有log_dest file /var/log/mosquitto/mosquitto.log
,一个带有日志目标到文件。在我的服务器上,Mosquitto的
mosquitto
用户正在运行。log_dest file /var/log/mosquitto/mosquitto.log
用户拥有root
无法处理服务状态错误。您也可能是这种情况。添加log_dest后检查service status
。我尝试将
/var/log/mosquitto
文件夹的所有权更改为mosquitto
。=“ lang-bash prettyprint-override”>
sudo chown -R mosquitto:mosquitto /var/log/mosquitto
然后启动服务。现在工作正常。
评论
我以前是用户拥有文件的,现在我也创建了一个组,并按建议更改了权限,但是没有运气。
– Helmar♦
17年1月6日在10:19
@Helmar嗯!这很奇怪。更改组后,您是否重新启动或启动了服务?
–bravokeyl
17年1月6日在10:20
@Helmar您可以再次交叉检查(已创建)日志目标目录是否存在吗?
–bravokeyl
17年1月6日在10:25
文件和目录都存在,并由mosquitto:mosquitto拥有
– Helmar♦
17年1月6日在10:32
评论
是否有任何东西写入/var/log/mosquitto/mosquitto.log?@ Aurora0001与该连接尝试无关,没有
什么操作系统?哪个版本的蚊子?
@Ghanima添加了信息
您可以尝试将其还原回旧的配置文件并进行检查吗?很笨:查看蚊子状态日志