在bash脚本中,睡眠似乎首先运行
如果脚本超过特定的持续时间(10分钟),我需要终止脚本在bash脚本中,睡眠似乎首先运行,bash,unix,sleep,Bash,Unix,Sleep,如果脚本超过特定的持续时间(10分钟),我需要终止脚本 当我在测试环境中测试它时,它似乎工作得很好examplescript.sh首先运行,如果运行时间超过10分钟,则将终止。然而,当我在我们的生产环境中尝试时,似乎睡眠是第一位的。在运行examplescript.sh之前,它会等待600秒。脚本中有什么错误吗?代码中有一点需要纠正 pgrep将对进程名而不是PID进行正则表达式搜索。您可以使用kill-0pid检查具有pid的进程是否正在运行 [(test)是一个命令[1],应该被视为一个。这
当我在测试环境中测试它时,它似乎工作得很好
examplescript.sh
首先运行,如果运行时间超过10分钟,则将终止。然而,当我在我们的生产环境中尝试时,似乎睡眠是第一位的。在运行examplescript.sh
之前,它会等待600秒。脚本中有什么错误吗?代码中有一点需要纠正
pgrep
将对进程名而不是PID进行正则表达式搜索。您可以使用kill-0pid
检查具有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] 这几天通常是一个构建
另一件需要注意的事情是,您的脚本将运行600秒,即使
examplescript.sh
只需要几秒钟就可以运行。您的生产机器速度是否明显更快?我没有在我的机器上真正运行此脚本的示例,但我认为如果您使用上面提到的代码,您的问题可能会得到解决
examplescript.sh &
pid=$!
sleep 600
if ['pgrep $pid']
then
kill $pid
fi
把它放在一个名为,monitor.sh
的文件中,并在后台运行该文件
monitor.sh &
希望这能有所帮助。您发布的脚本有问题,但它与
睡眠
在examplescript.sh启动之前运行无关(这应该是不可能的)。请参阅shellcheck.net。另一件需要注意的事情是,您的脚本将运行600秒,即使examplescript.sh只需几秒钟即可运行。-如果不使用睡眠,我如何才能在超过10分钟的情况下运行kill?@noobLadyTea您的脚本与睡眠600秒的脚本一样。
monitor.sh &