【问题标题】:How to check whether a shell script is running in the server如何检查服务器中是否正在运行 shell 脚本
【发布时间】:2015-02-05 22:19:51
【问题描述】:

我在服务器中运行一个 shell 脚本,命令行参数如下。

./xyz.sh DD 10 20 

我想在脚本中编写一些检查代码,它会检测服务器中是否正在运行相同的脚本。如果相同,则它不会运行,否则它将运行。注:对于同一脚本的不同运行,命令行参数可能会有所不同。

欢迎对此提供任何帮助。

【问题讨论】:

    标签: linux shell scripting command


    【解决方案1】:

    您有多种方法可以检查程序是否正在运行。

    检查正在运行的程序同名

    pidof xyz
    

    这将打印每个名为“xyz”的程序的 pid,如果找到 pid,则返回退出代码 0,否则返回 1(所以如果您只想知道程序是否正在运行,您只需要检查该命令的退出代码)。

    如果你没有pidof:

    ps aux | grep xyz.sh | grep -v grep
    

    并检查输出是否为空。

    更可靠的解决方案

    如果你想要一些更复杂的东西(这将检查 this 脚本是否正在运行,而不仅仅是同名的东西),解决方案通常是创建一个 pid 文件:

    在脚本的开头,检查文件/var/run/xyz.pid 是否存在。如果存在,则程序已经在运行。如果没有,则创建它并继续正常执行。在脚本正常执行结束时,删除文件。

    您可以在创建xyz.pid 文件时编写脚本的pid。这样,如果用户想要停止正在运行的脚本而不自己杀死它,他们可以使用例如--stop 之类的选项再次调用该脚本。然后您的脚本可以读取.pid 文件并正确终止它(例如通过发送信号要求它正常关闭)。

    这是很多服务(例如一些 http 服务器)的工作方式。

    【讨论】:

      【解决方案2】:

      您也可以尝试实施锁定文件。 在 shell 执行时首先创建一个文件。 在创建文件之前检查它是否存在。如果是,则跳过该过程,如果不继续。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多