【问题标题】:How do I make sure my bash script isn't already running? - continued如何确保我的 bash 脚本尚未运行? - 继续
【发布时间】:2014-12-23 19:56:00
【问题描述】:

继续Shell script: Ensure that script isn't executed if already running 并道歉: 在最后一个解决方案中,“ps”是否足够,或者应该是“ps -ef”来显示所有正在运行的进程?

抱歉,我没有足够的权限为上一个问题添加评论。

【问题讨论】:

  • 如果您需要进一步说明,您应该在答案下方添加评论。这不应该是一个新问题。
  • flock 解决方案更好,ps 版本充满了竞态条件。 ps 是否足够取决于您需要的排他性,如果它需要跨用户/会话排他,那么,是的,您需要 ps -e/ ps a。还要注意 ps 是最依赖于系统的命令之一,即 ps 给出的输出在 Solaris 到 Linux 到 AIX 上可能有很大不同,所以如果这与您相关,请记住这一点。
  • 我想我理解“竞争条件”场景,但我怀疑它是否适用。在我尝试之前,我只需要确保没有其他人运行过该脚本。
  • @AndyKendall,那么您需要使用某种锁定,例如符号链接可以(例如,在脚本开头创建符号链接,设置陷阱以在终止时删除符号链接)。创建符号链接是一个原子操作(在大多数 FS 上)。
  • 直接回答您的问题:如果您想用ps 做得不好,并且只关心由同一用户运行的其他实例,那么单独使用ps 就足够了。如果您关心其他用户运行的实例,是的,您需要添加一些参数。但是,无论如何,如果您确实需要脚本可靠且正确地运行,则根本不要依赖ps——使用flock

标签: bash


【解决方案1】:

您可以通过以下方式找到此脚本: ps斧头| grep 脚本名

【讨论】:

  • 有了这个命令,即使grep找到了“scriptname”,也不代表脚本正在运行。示例:它只是用“vim scriptname”打开的。
猜你喜欢
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-27
  • 1970-01-01
相关资源
最近更新 更多