emqttd这个东西做的真心不咋地,之前有emq_auth_mysql的plugin死活无法启动的问题,现在又碰到trace无法打开的问题。
查看emqttd服务器当前连接的所有client:
emqttd_ctl clients list
要打开其中一个的client的trace log:
emqttd_ctl trace client A0A3B87007B0 log/A0A3B87007B0.log
结果显示trace成功:
但是在log目录下(log目录和bin目录平级),根本就没有A0A3B87007B0.log这个文件的产生。囧!!
误打误撞,看到了emqttd的错误日志/var/log/emqttd/error.log
由于权限问题,A0A3B87007B0.log无法创建!(这就是我觉得emqttd不咋地的重要原因,明明trace文件没有创建成功,你还报说successfully!)。所以只能从权限的角度去解决。
查看emqttd的进程,发现emqttd的相关进程都是以emqtt作为有效用户运行的,尽管我是以root用户来启动emqttd服务的,但是不知由于何种原因,我始终没有找到方法来修改emqttd服务的有效用户。
所以只好换个思路,查看系统的所有用户:
cat /etc/passwd
用户emqtt对应目录为/var/lib/emqttd,将trace文件放在该目录下,如:
emqttd_ctl trace client A0A3B87007B0 /var/lib/emqttd/A0A3B87007B0.log
A0A3B87007B0.log文件创建成功。如果需要关闭,只要:
emqttd_ctl trace client A0A3B87007B0 off
总结:
Linux进程对资源访问涉及到Linux用户的权限管理,其中的概念有实际用户,有效用户,文件所有者等。可参考:
https://www.linuxidc.com/Linux/2018-10/154540.htm
对emqttd的操作可参考:
https://developer.emqx.io/docs/broker/v2/cn/commands.html