如何检查系统是否达到超时?

问题描述

我正在使用 bash 脚本运行 java jar 文件和 psql 命令。我正在使用 timeout 命令来停止任何长时间运行的命令。

    TIMEOUT=2000
    timeout $TIMEOUT java -jar myApp.jar
    timeout $TIMEOUT java -jar myApp2.jar     
    timeout $TIMEOUT psql .....

我需要保留有多少命令超时的标志。

如何检查 timeout 命令是否达到限制并停止命令?

解决方法

对于人员超时:

如果命令超时,并且没有设置--preserve-status,则以状态124退出。否则以COMMAND状态退出。如果未指定信号,则在超时时发送 TERM 信号。 TERM 信号会杀死任何不阻塞或捕获该信号的进程。可能需要使用 KILL(9) 信号,因为无法捕捉到该信号,在这种情况下,退出状态为 128+9 而不是 124。

你必须测试返回值

timeout $TIMEOUT java -jar myApp.jar
CODE=$?
if [ $CODE -eq 124 ] || [ $CODE -eq 133] 
then
    echo "command xxx take more than $TIMEOUT to run"
fi

使用 bash,您可以为此创建一个函数:

my_timeout () {
    TIMEOUT=$0
    shift
    timeout $TIMEOUT $*
    CODE=$?
    if [ $CODE -eq 124 ] || [ $CODE -eq 133] 
    then
        echo "command $* take more than $TIMEOUT to run"
    fi    
}


TIMEOUT=2000
my_timeout $TIMEOUT java -jar myApp.jar
my_timeout $TIMEOUT java -jar myApp2.jar