Bash lua os.execute不';如果脚本从/etc/rc.local运行,则无法工作
我有一个简单的lua脚本,它侦听特定事件,然后向twilio.com web服务发出POST请求,启动一个呼叫,然后发送一封邮件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("**
#!/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是从根用户运行的