【问题标题】:Preventing multiple executions of a Lua script防止多次执行 Lua 脚本
【发布时间】:2012-12-21 15:55:59
【问题描述】:

我正在 Linux 中编写一个只能运行一个实例的 Lua 脚本。为了在 Bash 中完成此操作,我将使用 mkdir 创建一个锁定文件,然后如果文件存在则立即从脚本返回;如果没有先前的实例正在运行,则允许脚本继续运行,并在完成后删除锁定文件。

有没有办法在 Lua 中原子地“检查文件是否存在,如果不存在则创建它”?我在 Lua 文档中找不到任何此类功能,但我是该语言的新手。 io.open("filename","w") 看起来不符合这些要求。如果没有 mkdir 的原生模拟,有没有更好的方法来完成这种类型的 Lua 脚本锁定?谢谢!

【问题讨论】:

  • @renab 我看到了那些;没有一个答案会自动检查和/或创建文件,这是我特别要问的。
  • 这听起来更像是单进程执行,和线程安全不是一回事。
  • @NicolBolas 是的。为了清楚起见,我已经编辑了问题。

标签: lua


【解决方案1】:

只是抄写你最终得到的答案:

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

--do protected stuff 

os.execute("rmdir lockfile")

【讨论】:

  • 谢谢,但这似乎不是原子的;如果文件检查操作 (io.open ("filename", "r")) 由一个脚本实例执行,然后在文件创建操作发生在第一个实例 (io.open("filename", "w")) 之前由另一个脚本实例再次执行,那么两个实例都会认为他们可以同时执行。
  • 你可能想要使用 os.execute 然后调用 mkdir
  • 是的,这就是我今天下午得到的结果:if not os.execute("mkdir lockfile >/dev/null 2>&1") then; return; end; --do protected stuff; os.execute("rmdir lockfile")。看起来 Lua 没有系统调用的本地方式来执行此操作,因为它基于 ANSI C。如果您想为后代编辑您的帖子,我会接受它。我会赞成你的评论,但因为这是我的第一个问题,我没有必要的声誉。
猜你喜欢
  • 2013-03-11
  • 2018-02-13
  • 2012-11-29
  • 2018-02-08
  • 2015-02-10
  • 1970-01-01
  • 1970-01-01
  • 2010-09-30
  • 1970-01-01
相关资源
最近更新 更多