通过 Lua 脚本重新启动系统

我需要通过 Lua 脚本重启系统。 在重启之前,我需要写入一些字符串,在重启完成后,我需要在 Lua 脚本中写入另一个字符串。

示例:

print("Before Reboot System")

通过 Lua 脚本重启系统

print("After Reboot System")

我应该如何实现这个功能?

原文链接 https://stackoverflow.com/questions/5327882

点赞
stackoverflow用户30470
stackoverflow用户30470

在 Lua 中没有办法做到你所要求的。取决于你的系统和设置,你可能可以使用 os.execute 实现这一点,但是 Lua 的库只包括标准 C 库中可能包含的功能,不包括操作系统特定的功能,如重启。

2011-03-16 20:41:00
stackoverflow用户325514
stackoverflow用户325514

你可以使用 os.execute 发送系统命令。在 Windows 中,命令为 shutdown -r,在 Posix 系统中,命令为reboot。因此,你的 Lua 代码看起来像这样:

要注意的是,重启命令的一部分是停止活动程序,例如你的 Lua 脚本。这意味着在 RAM 中存储的任何数据都将丢失。你需要将要保留的任何数据写入磁盘,例如使用 table 序列化

不幸的是,如果没有更多关于你环境的了解,我无法告诉你如何再次调用这个脚本。你可以将调用你的脚本的命令添加到 ~/.bashrc 的末尾或类似的位置。

确保在回来时,加载这些数据并从调用重启功能之后的某个点开始是你要做的第一件事情!你不想陷入无尽的重启循环中,其中你的计算机在打开时执行的第一件事情是关闭自己。像这样的东西应该可以工作:

local function is_rebooted()
    -- 文件的存在表明重启状态
    if io.open("Rebooted.txt", "r") then
        os.remove("Rebooted.txt")
        return true
    else
        return false
    end
end

local function reboot_system()
    local f = assert(io.open("Rebooted.txt", "w"))
    f:write("Restarted!  Call On_Reboot()")

    -- 在这里做某些事情,以确保在重启时调用脚本

    -- package.config 的第一行是目录分隔符
    -- 假设 '\' 表示Windows
    local is_windows = string.find(_G.package.config:sub(1,1), "\\")

    if is_windows then
        os.execute("shutdown -r");
    else
        os.execute("reboot")
    end
end

local function before_reboot()
    print("Before Reboot System")
    reboot_system()
end

local function after_reboot()
    print("After Reboot System")
end

-- 开始执行!
if not is_rebooted() then
    before_reboot()
else
    after_reboot()
end

(警告-未经测试的代码。我不想重新启动计算机。 :))

2011-03-17 01:32:27