我有一个应用程序服务器在我的 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 &