退出脚本之前等待预定义的时间

退出脚本之前等待预定义的时间

我有一个应用程序服务器在我的 unix 框中运行,进程名称为abc_test.我有一个 shell 脚本,我必须在其中使用/opt/abc/bin/stop.现在有时我的服务器没有停止,所以我需要检查我的进程是否仍在运行。如果它正在运行,则休眠几秒钟,然后再次检查进程是否仍在运行。如果 5 分钟后进程仍在运行,那么我想从 shell 脚本成功退出,但如果该进程没有运行,则也从 shell 脚本成功退出。

所以我想出了下面的脚本,但我无法理解如何在下面的 shell 脚本中添加这个 5 分钟的东西。我的下面的脚本是否会完全按照我的想法进行?我想这也可能会得到改善。

#!/bin/bash

/opt/abc/bin/stop

# Wait for 10 second
sleep 10

# Number of seconds to wait
WAIT_SECONDS=300
# Counter to keep count of how many seconds have passed
count=0

while pgrep abc_test > /dev/null
do
    echo "server is still running."
    # Wait for one second
    sleep 1
    # Increment the second counter
    ((count++))
    # Has the process been killed? If so, exit the loop.
    if ! pgrep abc_test > /dev/null ; then
        break
    fi
    # Have we exceeded $WAIT_SECONDS? If so exit the loop
    if [ $count -gt $WAIT_SECONDS ]; then
        break
    fi  
done

答案1

假设/opt/abc/bin/stop不会阻止您的脚本似乎有效。
作为穆鲁建议您可以跳过该$count变量并使用内置的$SECONDS.这将导致这样的代码:

/opt/abc/bin/stop
# Wait for 10 second
sleep 10
# Number of seconds to wait
WAIT_SECONDS=300
while pgrep abc_test > /dev/null
do
    echo "server is still running. Seconds: $SECONDS"
    # Wait for one second
    sleep 1
    # Have we exceeded $WAIT_SECONDS? If so exit the loop
    if [ $SECONDS -gt $WAIT_SECONDS ]; then
        break
    fi
done

如果/opt/abc/bin/stop确实阻塞,只需在后台调用它,例如:

/opt/abc/bin/stop &

相关内容