睡眠似乎首先在bash脚本中运行

时间:2016-05-25 20:56:53

标签: bash unix sleep

如果脚本超过特定的持续时间(10分钟),我需要终止脚本

examplescript.sh &
pid=$!
sleep 600 
if ['pgrep $pid']
  then 
    kill $pid
fi

当我在我的测试环境中测试它时,似乎运行良好。 examplescript.sh首先运行,如果运行超过10分钟,它将被终止。但是,当我在我们的生产环境中尝试时,似乎睡眠首先运行。在运行examplescript.sh之前等待600秒。脚本中有什么问题吗?

2 个答案:

答案 0 :(得分:2)

你的代码中应该纠正多重的事情。

pgrep将对进程名称而不是pids进行正则表达式搜索。您可以使用kill -0 pid检查pid的进程是否正在运行。

[test)是一个命令[1],应该被视为一个。这意味着每个参数应该用空格分隔。使用[时,最后一个参数也应为]

[ arg1 arg2 ]

在您的示例中,您不需要[,因为如果进程仍在运行,kill -0将真正退出:

if kill -0 pid; then

并将其包装起来:

examplescript.sh &
pid=$!
sleep 600
if kill -0 "$pid" 2> /dev/null; then
    kill "$pid"
fi
如果进程不再运行,

kill -0将向stderr写入错误。因此,我们将其重定向到/dev/null

[1]这些日子通常都是内置的。

另外需要注意的是,即使examplescript.sh只需几秒钟就可以运行,您的脚本也会运行600秒。

答案 1 :(得分:0)

您的生产机器是否明显更快?我没有在我的机器上运行此示例脚本,但我认为如果你采用上面提到的代码,你的问题可能会得到解决

strMyString = strMyString * 100

将其放在名为examplescript.sh & pid=$! sleep 600 if ['pgrep $pid'] then kill $pid fi 的文件中,然后在后台运行该文件。即。

monitor.sh

希望这有帮助。