我在服务器中使用命令行参数运行shell脚本,如下所示。
./xyz.sh DD 10 20
我想在脚本中编写一些检查代码,它会检测服务器中是否运行了相同的脚本。如果它正在运行,那么它将不会运行,否则它将运行。注:对于同一脚本的不同运行,命令行参数可能不同。
欢迎提供任何帮助。
答案 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执行时创建一个文件。 在创建文件之前,请检查它是否存在。如果是,则跳过该过程,如果不继续。