Bash lua os.execute不';如果脚本从/etc/rc.local运行,则无法工作

Bash lua os.execute不';如果脚本从/etc/rc.local运行,则无法工作,bash,curl,lua,init,Bash,Curl,Lua,Init,我有一个简单的lua脚本,它侦听特定事件,然后向twilio.com web服务发出POST请求,启动一个呼叫,然后发送一封邮件 #!/usr/bin/lua -- February 2015, Suxsem local sock = require("socket") local mosq = require("mosquitto") local mqtt = mosq.new("sonny_lua_scattato", true) mqtt:login_set("**

我有一个简单的lua脚本,它侦听特定事件,然后向twilio.com web服务发出POST请求,启动一个呼叫,然后发送一封邮件

#!/usr/bin/lua
-- February 2015, Suxsem

local sock      = require("socket")
local mosq      = require("mosquitto")

local mqtt = mosq.new("sonny_lua_scattato", true)
mqtt:login_set("***", "***")

local call = function (from, to)
        os.execute([[curl -X POST 'https://api.twilio.com/2010-04-01/Accounts/***/Calls.json' \
                --data-urlencode 'To=]] .. to .. [[' \
                --data-urlencode 'From=]] .. from .. [[' \
                -d 'Url=https://demo.twilio.com/welcome/voice/' \
                -d 'Method=GET' \
                -d 'FallbackMethod=GET' \
                -d 'StatusCallbackMethod=GET' \
                -d 'Timeout=20' \
                -d 'Record=false' \
                -u ***:***> twiliolog.txt]])
end

local callback = function (mid, topic, message)
        print("Received: " .. topic .. ": " .. message)

            if topic == "ArseniAlarm/Scattato" then

                local call_from = "+393317893***"
                local call_to = {"+393299573***",
                                      "+393473621***",
                                      "+393492829***"}

                for i, to in ipairs(call_to) do
                        call(call_from, to)
                end

                local rcpt = {"semer***.stef***@hotmail.it",
                                "miky.semer***@live.it"}

                local sbj = "ANTIFURTO ARSENI"
                local bdy = "ANTIFURTO ARSENI - " .. os.date("%T - %d/%m/%Y")
                os.execute('echo -e "To: ' .. table.concat(rcpt, ",") .. '\r\nSubject: ' .. sbj .. '\r\n\r\n' .. bdy .. '" | msmtp --from=default -t')

        end

end

mqtt:callback_set("ON_MESSAGE", callback)

local connected = false

mqtt:callback_set("ON_CONNECT", function ()
        print("Connected")
        connected = true
        mqtt:subscribe("ArseniAlarm/Scattato", 2)
end)
mqtt:callback_set("ON_DISCONNECT", function ()
        print("Disconnected")
        connected = false
end)

mqtt:connect("127.0.0.1", 1883, 60)

while true do
        mqtt:loop()
        if connected then
                sock.sleep(1.0) -- seconds
        else
                sock.sleep(5.0)
                mqtt:reconnect()
        end
end
现在。。。我使用以下命令运行脚本:

cd /root/mqtt_client/ ; lua /root/mqtt_client/mqtt_scattato.lua &
一切正常,我收到了电话和邮件,在twiliolog.txt中(如果您查看我执行“curl…>twiliolog.txt”启动呼叫的代码),我可以看到twilio的响应

但是

如果我将相同的命令(cd/root/mqtt_client/;lua/root/mqtt_client/mqtt_scattato.lua&)放在/etc/rc.local中,会发生一些奇怪的事情: 1) 我收到了邮件,但没有接到电话! 2) twiliolog.txt(curl的输出)已正确创建,但为空

我的平台是一个带有openwrt屏障断路器的路由器


我真的希望你能帮助我,谢谢

我最终完全删除了os.execute调用。 我现在正在使用lua本机https套接字:

local https = require("ssl.https")
local call = function (from, to)
        local body = "To=" .. to .. "&From=" .. from .. "&Url=https://demo.twilio.com/welcome/voice/&Timeout=20&Record=false"
        https.request {
                protocol = "tlsv1",
                method="POST",
                url="https://api.twilio.com/2010-04-01/Accounts/***/Calls.json",
                source=ltn12.source.string(body),
                headers = {["content-length"] = #body, ["content-type"] = "application/x-www-form-urlencoded"},
                user="***",
                password="***",
        }
end
我仍然在使用os.execute发送邮件,而且工作正常,因此我认为问题与curl+os.execute+start脚本在引导时的组合有关


我仍然不知道是什么问题导致了这种行为

可能是文件权限问题?嗯,我认为openwrt是从根用户运行的