Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reboot a System through Lua Script

Tags:

lua

I need to reboot System through a Lua Script. I need to write some string before the Reboot happens and need to write a string in a Lua script once the Reboot is done.

Example :

print("Before Reboot System")

Reboot the System through Lua script

print("After Reboot System")

How would I accomplish this?

like image 902
che Avatar asked Feb 25 '23 19:02

che


2 Answers

You can use os.execute to issue system commands. For Windows, it's shutdown -r, for Posix systems it's just reboot. Your Lua code will therefore look like this:

Be aware that part of the reboot command is stopping active programs, like your Lua script. That means that any data stored in RAM will be lost. You need to write any data you want to keep to disk, using, for instance, table serialization.

Unfortunately, without more knowledge of your environment, I can't tell you how to call the script again. You could be able to append a call to your script to the end of ~/.bashrc or similar.

Make sure that loading this data and starting at a point after you call your reboot function is the first thing that you do when you come back! You don't want to get stuck in an endless reboot loop where the first thing your computer does when it turns on is to turn itself off. Something like this should work:

local function is_rebooted()
    -- Presence of file indicates reboot status
    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()")

    -- Do something to make sure the script is called upon reboot here

    -- First line of package.config is directory separator
    -- Assume that '\' means it's 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

-- Execution begins here !
if not is_rebooted() then
    before_reboot()
else
    after_reboot()
end

(Warning - untested code. I didn't feel like rebooting. :)

like image 158
Kevin Vermeer Avatar answered Mar 05 '23 08:03

Kevin Vermeer


There is no way to do what you are asking in Lua. You may be able to do this using os.execute depending on your system and set up but Lua's libraries only include what is possible in the standard c libraries which does not include operating system specific functionality like restart.

like image 27
Nick Van Brunt Avatar answered Mar 05 '23 06:03

Nick Van Brunt