我想知道是否有一些工具/应用程序可以阻止另一个工具/应用程序多次运行。我知道它可以通过使用 pidfile 手动完成,但没有一些工具吗?
喜欢:/bin/ruonce /bin/myApp
当应用程序第一次在后台生成时它将返回 0,当它已经运行时返回 1..
在 OpenRC 中有一个关闭的 start-stop-daemon,但它不必要地复杂并且不是独立的。
我想知道是否有一些工具/应用程序可以阻止另一个工具/应用程序多次运行。我知道它可以通过使用 pidfile 手动完成,但没有一些工具吗?
喜欢:/bin/ruonce /bin/myApp
当应用程序第一次在后台生成时它将返回 0,当它已经运行时返回 1..
在 OpenRC 中有一个关闭的 start-stop-daemon,但它不必要地复杂并且不是独立的。
有一个简单的实用程序调用
flock
,它将一个进程包装在一个锁文件中,默认情况下会创建一个独占锁。这意味着如果先前的调用仍在运行,则由flock 文件包装的进程的后续运行将失败。您还可以告诉flock 立即失败而不是等待锁定:
此二进制文件是
util-linux
软件包的一部分,默认情况下应在您选择的发行版中可用。您可以在脚本中使用锁定文件例程(通常是目录)来执行此操作... PID 是处理此问题的正确方法,但锁定文件可能是实现您想要的快速方法。另请参阅此 StackOverflow 解决方案。
我经常使用的 Perl 脚本的解释示例。它一次只能运行一个实例:
别的什么都没有想到。
但是,您需要的是可以轻松编写的脚本。要求是(不按程序顺序):
这是 start-stop-daemon 的大部分功能,所以它确实让人想知道为什么您不简单地忽略不需要的功能并使用它。您甚至可以制作一个脚本或别名来包装它,这样您就可以输入非常少量的字符。
为了感兴趣,您也可以在没有 PID 文件的情况下执行此操作,并通过
pidof
在脚本中使用来捕获使用特定文件名(不是路径名)运行的所有进程,无论是否“正确”启动。