问题描述
我正在使用 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