(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 stop 和 start)。如果我将 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
我已经在我的路由器上安装了 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 stop 和 start)。如果我将 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