编写一个bash脚本来检查进程是否在x秒内响应?

时间:2014-04-15 22:23:23

标签: linux bash scripting

如何编写脚本来检查某个进程是否需要花费几秒钟的时间来响应,如果超过该数量则会将其删除?

我已尝试过timeout命令,但问题是它是源专用服务器,当我编辑它的bash脚本时:

    HL=./srcds_linux
    echo "Using default binary: $HL"

并将其更改为超时25 ./srcds_linux并以root身份运行它不会运行服务器: 错误:源引擎二进制文件''没找到,退出

因此,假设我无法编辑服务器bash脚本,是否有办法创建一个脚本,可以检查是否有任何未执行脚本的程序在x秒内超时?

1 个答案:

答案 0 :(得分:1)

听起来问题是你错误地改变了脚本。

如果您正在查看this script,逻辑基本上就是:

HL=./srcds_linux
if ! test -f "$HL"
then
  echo "Command not found"
fi
$HL

听起来你正试图设置HL="timeout 25 ./srcds_linux"。这将导致文件检查失败。

更正确的方法是更改​​调用,而不是要调用的文件:

HL=./srcds_linux
if ! test -f "$HL
then
  echo "Command not found"
fi
timeout 25 $HL
但是,如果花费太长时间,

timeout会杀死该程序。它并不关心程序是否响应任何事情,只需花费超过25秒的时间来完成它。

如果该程序似乎挂起,您可以例如检查是否停止输出数据25秒:

your_command_to_start_your_server | while read -t 25 foo; do echo "$foo"; done
echo "The command hasn't said anything for 25 seconds, killing it!"
pkill ./srcds_linux