我正在尝试远程运行脚本(远程是服务器B)。当我在服务器A上本地运行脚本时,得到了预期的结果。当我通过SSH从服务器A到服务器B运行脚本时,出现以下错误:

/usr/bin/ssh admin@server.domain.com "lua/rpi.init"  
lua: lua/rpi.init:8: attempt to index upvalue 'logFile' (a nil value) stack traceback: 
        lua/rpi.init:8: in function 'logMsg' 
        lua/rpi.init:47: in main chunk 
#!/usr/bin/env lua 
local f = assert(io.popen("sudo netstat -a | grep ^tcp[^6] | grep LISTEN | grep [^0-9]22[0-9][0-9]", 'r')) 
local ports22 = {} 
local logFile 
 
function logMsg(msg) 
        logFile = io.open("logs/pi.init.log", "a+") 
        logFile:write(os.date("%b %d %Y %X ") .. tostring(msg) .. "\n") 
        logFile:close() 
end 
 
function getPorts22() 
logMsg("Getting available ports...") 
while true do 
        line = f:read() 
        if line == nil then break end 
        port = string.sub(line, 40, 44) 
        table.insert(ports22, port) 
end 
f:close() 
table.sort(ports22) 
end 
 
function getNextOpenPort22() 
        local openPort = 2222 
        if #ports22 == 0 then 
                logMsg("Returning port :" .. openPort) 
                return openPort 
        end 
        for i=1, #ports22 + 1 do 
                if tonumber(ports22[i]) == openPort then 
                        openPort = openPort + 1 
                else 
                        logMsg("Returning port: " .. openPort) 
                        return openPort 
                end 
        end 
 
end 
 
 
function printPorts() 
        msg = table.concat(ports22, ", ") 
        logMsg("Found ports in use: " .. tostring(msg)) 
end 
 
logMsg("Script called to run.") 
getPorts22() 
printPorts() 
print(getNextOpenPort22()) 

是否可以通过SSH(bash,lua或其他方式)运行脚本并使它们在远程计算机上执行io操作?

另外,将值从远程脚本返回到本地主机的最佳方法是什么?我通过调用print()从脚本中返回值,以使本地脚本能够实际使用。

请您参考如下方法:

因为io.open调用返回nil值和错误消息,所以您收到此错误。您可能需要将此行logFile = io.open("logs/pi.init.log", "a+")更改为以下内容:

local logFile, err = io.open("logs/pi.init.log", "a+") 
if not logFile then error(err, 2) end 

io.open调用不成功时,这将打印错误消息。就您而言,这可能是由于 logs文件夹不存在,权限不足或其他原因引起的;错误消息应将您指向正确的方向。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!