如果脚本超过特定的持续时间(10分钟),我需要终止脚本
examplescript.sh &
pid=$!
sleep 600
if ['pgrep $pid']
then
kill $pid
fi
当我在我的测试环境中测试它时,似乎运行良好。 examplescript.sh
首先运行,如果运行超过10分钟,它将被终止。但是,当我在我们的生产环境中尝试时,似乎睡眠首先运行。在运行examplescript.sh
之前等待600秒。脚本中有什么问题吗?
答案 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
希望这有帮助。