【发布时间】:2021-10-26 03:48:22
【问题描述】:
我尝试了一种使用超时来识别并退出服务器进入 RUNNING 状态或在超时值处退出监视 RUNNING 状态的方法,不幸的是其中一个服务器具有 bash 版本 3 并且不支持超时。
timeout 300s grep -q 'Server state changed to RUNNING' <(tail -f AdminServer.out)
if [ $? != 0];then
printf "\n===> unable to bring up the server.please check\n"
else
printf "\n===> server came to RUNNING state\n"
fi
我尝试了以下方法,但在出现日志时无法退出
( cmdpid=$BASHPID; (sleep 60; kill $cmdpid) & exec `grep -q 'Server state changed to RUNNING' <(tail -f AdminServer.out)`)
但它首先给出grep -q 'Server state changed to RUNNING' <(tail -f AdminServer.out) 的命令行替换错误,然后给出如下所示的kill 用法错误(似乎kill 不起作用),
kill: 用法:kill [-s sigspec |等等……
- 很遗憾,我无法升级服务器的 bash 版本,对此高度赞赏的任何指导。谢谢!!
*服务器:suse 发行版 2.6.32.12-0.7-default
【问题讨论】:
-
Bash 不支持超时,因为它是一个外部命令。它是 ubuntu 和 centos 中 coreutils 的一部分。我没有要检查的 suse 系统,但是如果缺少它,您可能可以获取源代码并进行编译。
-
@user1672382 :这与 bash 无关,因为
timeout无论如何都不是内部 bash 命令。但是,如果 Suse 2.6 不包含 timeout 命令,我会感到惊讶。也许他们在非标准目录中拥有它?我会在 [Suse|(forums.opensuse.org) 上问这个问题。除了 bash,还有哪些其他语言可用?许多编程语言(Perl、Tcl、...)都具有执行超时控制的功能,因此您可以在其中一种中编写包装器。 -
exec `grep -q 'Server state changed to RUNNING' <(tail -f AdminServer.out)`定义不明确;grep -q永远不会输出任何东西,所以exec没有任何东西可以执行。 -
unix.stackexchange.com/questions/156131/… 有一些在给定时间后发送信号的正确方法示例。