2013-01-07 212 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的。如果你想编辑你的后裔,我会接受它。我喜欢你的评论,但因为这是我的第一个问题,我没有必要的声望。 –