为了使Raspberry Pi能够掌控自己的工作,我建立了Mosquitto MQTT经纪人。在基本设置中,一切正常。

我可以使用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。

我打破了什么?

评论

是否有任何东西写入/var/log/mosquitto/mosquitto.log?

@ Aurora0001与该连接尝试无关,没有

什么操作系统?哪个版本的蚊子?

@Ghanima添加了信息

您可以尝试将其还原回旧的配置文件并进行检查吗?很笨:查看蚊子状态日志

#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