2011-03-16 94 views
4

我需要通過Lua腳本重新啓動系統。 我需要在重新啓動之前編寫一些字符串,並且一旦重新啓動完成,需要在Lua 腳本中編寫一個字符串。通過Lua腳本重新啓動系統

例子:

print("Before Reboot System") 

Reboot the System through Lua script 

print("After Reboot System") 

我將如何做到這一點?

+0

有重新啓動系統 – che 2011-03-16 19:52:13

回答

2

在Lua中沒有辦法做你正在問的問題。您可以使用os.execute來完成此操作,具體取決於您的系統並進行了設置,但Lua的庫僅包含標準c庫中可能包含的內容,其中不包括重新啓動等操作系統特定的功能。

6

您可以使用os.execute來發出系統命令。對於Windows,它是shutdown -r,對於Posix系統,它只是reboot。因此,您的Lua代碼將如下所示:

請注意,重新啓動命令的一部分正在停止活動程序,如您的Lua腳本。這意味着存儲在RAM中的任何數據都將丟失。您需要使用例如table serialization將任何要保留的數據寫入磁盤。

不幸的是,沒有更多關於您的環境的知識,我無法告訴您如何再次調用腳本。您可以將腳本追加到~/.bashrc或類似的末尾。

確保加載此數據並在您調用重新啓動功能後的某一點開始是您回來時的第一件事!你不想陷入無休止的重啓循環中,當你的電腦開機時,第一件事就是關閉它。像這樣的東西應該工作:

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 

(警告 - 未經測試的代碼我不喜歡重啓:)

+0

注ANY WAY:這不會對系統的正常工作。這不是Posix或Windows。但我猜你知道如果你正在其中一個系統上工作。 – 2011-03-17 01:35:51