(OpenWRT) Mqtt 服务命令无法通过 C 运行,Lua

(OpenWRT) Mqtt service command is not working via C, Lua

我已经在我的路由器上安装了 mqtt 并使用 WEB UI 来控制它。 这是我添加到 mosquitto.conf

中的一些行
user root
allow_anonymous false
password_file /etc/mosquitto/passwd

这里是 lua 脚本的一部分。

if mqttOnOff == "1" then // mqttOnOff is setted at WEB UI.
    os.execute("service mosquitto enable")
    os.execute("echo \"mosquitto service is enabled\" > /dev/console")
    os.execute("service mosquitto stop")
    os.execute("echo \"mosquitto service is stopped\" > /dev/console")
    os.execute("service mosquitto start")
    os.execute("echo \"mosquitto service is started\" > /dev/console")
elseif mqttOnOff == "0" then
    os.execute("service mosquitto disable")
    os.execute("echo \"mosquitto service is disabled\" > /dev/console")
    os.execute("service mosquitto stop")
    os.execute("echo \"mosquitto service is stopped\" > /dev/console")
else
    os.execute("echo \"mqttOnOff value returned with error\" > /dev/console")
end

每当我将 mqttOnOff 的值设置为 1 时,我都可以在控制台看到以下行

mosquitto service is enabled
mosquitto service is stopped
mosquitto service is started

如果我将值设置为 0,显然我可以看到...

mosquitto service is disabled
mosquitto service is stopped

无论如何,这意味着正在使用 os.execute() 执行服务命令 但是,它不起作用。

每当我用手指在控制台手动输入这些命令时,它都有效。它停止ps好,启动好,重启好,启用好,禁用好。

但每次我使用 lua 的 os.execute 都不起作用。

我手动启动 mosquitto 并使用 WEB UI 设置再次启用(启动)并使用 ps 检查 PID,PID 显示相同(应该有所不同,因为命令有 serevice mosquitto stopstart)。如果我将 WEB UI 设置为禁用(启动),它不会停止 ps.

手动停止mosquitto并在WEB设置UI启用,不启动

所以,我使用了 C,而不是 lua。机制相同。只使用 system() 函数因为它是 C.

if (mqttOnOff == 1)
{
    system("service mosquitto enable");
    system("echo enable > /dev/console");
    system("service mosquitto stop");
    system("echo stop > /dev/console");
    system("service mosquitto start");
    system("echo start > /dev/console");
}
else if (mqttOnOff == 0)
{
    system("service mosquitto disable");
    system("echo disable > /dev/console");
    system("service mosquitto stop");
    system("echo stop > /dev/console");
}

和lua一样,我可以看到

enable
stop
start

当我通过WEB设置时UI,即使手动执行这个编译好的C文件

结果是一样的。 mqtt 未启动。

有什么解决办法吗?

解决办法!!

由于service不可执行,我没有使用service,而是通过mosquitto命令执行了mosquitto。

https://forum.openwrt.org/t/mqtt-service-command-is-not-working-via-c-lua/116434/2