如何检查shell脚本是否在服务器中运行

时间:2014-12-08 09:29:43

标签: linux shell scripting command

我在服务器中使用命令行参数运行shell脚本,如下所示。

./xyz.sh DD 10 20 

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

欢迎提供任何帮助。

2 个答案:

答案 0 :(得分:1)

您可以通过各种方式检查程序是否正在运行。

检查正在运行的程序具有相同的名称

pidof xyz

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

如果您没有pidof

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

检查输出是否为空。

更可靠的解决方案

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

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

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

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

答案 1 :(得分:0)

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