防止脚本运行两次相同的参数

时间:2017-11-13 23:38:15

标签: linux bash

我们正在研究构建一个logcheck脚本,该脚本将在找到给定参数时触发给定的日志文件和电子邮件。我无法准确地确定此脚本的另一个版本是否与至少一个针对同一文件的相同参数一起运行。脚本可以采取以下措施:

logcheck -i <filename(s)> <searchCriterion> <optionalEmailAddresses>

我曾尝试将ps aux与一系列grep,sed和cut一起使用,但它总是比脚本本身更多的代码,并且很少有效地工作。是否有一种有效的方法来判断此脚本的另一个版本是否使用相同的文件名和搜索条件运行?一些输入的例子:

EX1 .\logcheck -i file1,file2,file3 "foo string 0123" email@address.com
EX2 .\logcheck -s file1 Hello,World,Foo
EX3 .\logcheck -i file3 foo email@address1.com,email@address2.com

在这种情况下,3不应该运行,因为1已经使用参数file3和foo运行。

1 个答案:

答案 0 :(得分:0)

您的问题有很多解决方案,我建议您创建一个锁定文件,格式如下:

arg1Ex1 PID#(Ex1)
arg2Ex1 PID#(Ex1)
arg3Ex1 PID#(Ex1)
arg4Ex1 PID#(Ex1)
arg1Ex2 PID#(Ex2)
arg2Ex2 PID#(Ex2)
arg3Ex2 PID#(Ex2)
arg4Ex2 PID#(Ex2)
脚本启动时

  • 它将在文件中搜索它收到的所有参数(awk command or grep
  • 如果列表中存在其中一个参数,则获取进程PID(例如awk 'print $2')以检查它是否仍在运行(ps)(仔细检查并发性,如果是进程异常结束以前垃圾可能会保留在文件中)
  • 如果PID仍然存在,则脚本将无法运行
  • 否则使用当前进程PID将参数附加到锁定文件并运行脚本。
  • 最后,执行时删除包含脚本已使用的参数的行,或删除所有带有PID的行。