如何从Bash退出(0)超时

时间:2018-05-17 02:43:25

标签: bash travis-ci

我正在尝试设置一个travis脚本,我们运行我们的应用程序,以确保它启动正常。如果是,那么我们可以通过构建。测试在启动时捕获错误。但是,它是一个api服务器,如果我运行二进制文件并且它成功,它将无限期地运行。

我尝试使用以下内容:

timeout --preserve-status 20s <binary>

但是这只会返回二进制文件的退出代码,该代码在超时时被终止。

timeout 20s <binary>

成功时返回127。

如果启动时出现二进制错误并且启动时成功启动说20秒后退出0以通过travis构建,是否可以使用运行二进制文件的脚本失败?

2 个答案:

答案 0 :(得分:3)

无需使用sleep您可以通过以下方式更改命令以强制0处的返回代码:

(timeout 20s <binary>; exit 0) 

示例:

(timeout 2s '/bin/sleep' 100; exit 0) #subshell creation                                                                                        
echo $?
0

VS

timeout 2s '/bin/sleep' 100
echo $?
124

答案 1 :(得分:3)

如果您要:

  • 返回退出代码0

    • 如果命令成功完成(代码0)。
    • 或者如果命令尚未完成(代码124),也可以。
  • 返回退出代码1

    • 如果命令在达到超时之前失败。

然后尝试:

timeout 10m some_command || ( [[ $? -eq 124 ]] && \
echo "WARNING: Timeout reached, but that's OK" )