【发布时间】:2015-02-05 22:19:51
【问题描述】:
我在服务器中运行一个 shell 脚本,命令行参数如下。
./xyz.sh DD 10 20
我想在脚本中编写一些检查代码,它会检测服务器中是否正在运行相同的脚本。如果相同,则它不会运行,否则它将运行。注:对于同一脚本的不同运行,命令行参数可能会有所不同。
欢迎对此提供任何帮助。
【问题讨论】:
标签: linux shell scripting command
我在服务器中运行一个 shell 脚本,命令行参数如下。
./xyz.sh DD 10 20
我想在脚本中编写一些检查代码,它会检测服务器中是否正在运行相同的脚本。如果相同,则它不会运行,否则它将运行。注:对于同一脚本的不同运行,命令行参数可能会有所不同。
欢迎对此提供任何帮助。
【问题讨论】:
标签: linux shell scripting command
您有多种方法可以检查程序是否正在运行。
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 服务器)的工作方式。
【讨论】:
您也可以尝试实施锁定文件。 在 shell 执行时首先创建一个文件。 在创建文件之前检查它是否存在。如果是,则跳过该过程,如果不继续。
【讨论】: