2013-01-07 269 views
2

我正在Linux中編寫一個只能運行一個實例的Lua腳本。要在Bash中完成此操作,我將使用mkdir創建一個鎖定文件,然後在文件存在的情況下立即從腳本返回;如果以前的實例沒有運行,則允許腳本繼續並在完成後刪除鎖定文件。防止多次執行Lua腳本

有沒有辦法在Lua中以原子方式「檢查文件是否存在或創建它,如果它不存在」?我在Lua文檔中找不到任何這樣的功能,但我對這種語言很陌生。 io.open("filename","w")看起來不符合這些要求。如果沒有本地模擬到mkdir,是否有更好的方法來完成這種類型的腳本鎖定在Lua?謝謝!

+0

這似乎是http://stackoverflow.com/questions/4990990/lua-check-if-a-file-exists的副本.. 。請嘗試其中一個解決方案來檢查LUA中是否存在文件 – renab

+0

@renab我看到了這些;沒有答案自動檢查和/或創建一個文件,這是我特別提出的問題。 –

+0

這聽起來更像是單個進程的執行,這與線程安全不一樣。 –

回答

1

只是抄寫你最後的答案:

if not os.execute("mkdir lockfile >/dev/null 2>&1") then 
    return 
end 

--do protected stuff 

os.execute("rmdir lockfile") 
+0

謝謝,但這似乎不是原子;如果文件檢查操作('io.open(「filename」,「r」)')由一個腳本實例執行,然後在第一個實例('io。 open(「filename」,「w」)'),那麼兩個實例都會認爲它們可以同時執行。 –

+1

你可能想使用os.execute調用mkdir然後 –

+0

是的,這是我在今天下午結束的:'如果不是os.execute(「mkdir lockfile>/dev/null 2>&1」),那麼;返回;結束; - 受保護的東西; os.execute(「rmdir lockfile」)'。它看起來像Lua沒有一個原生的方式來做到這一點,沒有系統調用,因爲它是基於ANSI C的。如果你想編輯你的後裔,我會接受它。我喜歡你的評論,但因爲這是我的第一個問題,我沒有必要的聲望。 –