保藏本站 保藏本站
真钱棋牌网主页 - 软件测验 - 常用手册 - 站长东西 - 技能社区
主页 > shell编程 > 正文

主页 - PHP - 数据库 - 操作体系 - 游戏开发 - JS - Android - MySql - Redis - MongoDB - Win8 - Shell编程 - DOS指令 - jQuery - CSS款式 - Python - Perl

Access - Oracle - DB2 - SQLServer - MsSql2008 - MsSql2005 - Sqlite - PostgreSQL - node.js - extjs - JavaScript vbs - Powershell - Ruby

浅谈CI脚本反常退出问题定位

布景

在CI脚本中,运用相似如下脚本进行项目编译的计时,但在履行过程中,有时会呈现CI脚本(命名为ci.sh)未彻底履行的状况:

#!/bin/bash -e

sleep_time=$1

start_time=`date "+%s"`
# do sth, this sleep would simulate project compilation
sleep $sleep_time
end_time=`date "+%s"`

process_time=`expr ( end_time - start_time )`
echo "---- process time(sec) are: " $process_time "seconds"

# ...

这个脚本,仅仅模仿咱们在CI中的程序,项目编译前计时,项目编译后再次计时,经过sleep休眠来模仿CI中项目编译锁耗费的时刻,然后核算出耗费的时刻。这个简化的脚本逻辑很简略,咱们经过以下指令来调用:

# ./ci.sh
---- process time(sec) are: 2 seconds

  

这样履行如同并不会犯错,那实践CI中为什么会犯错呢?

剖析

首要,咱们发现,当呈现脚本未彻底履行完结时,不会打印“process time(sec) are”这一句,也便是说过错是这句之前引起的。

别的,仔细的朋友还会发现,在脚本的首行,咱们给bash运用了-e参数,这个参数的作用便是,一旦shell脚本中任何一行呈现了过错,shell脚本就中止运转。所谓的呈现过错,也便是这行句子的回来值为非零。那么,CI脚本未彻底履行的原因,很可能便是由于某一行句子呈现了过错,导致脚本直接退出。

经过添加打印“echo $?”来打印上一行句子的履行成果,很快定位到报错的句子在核算处理时刻的这一行:

process_time=`expr ( end_time - start_time )` 

 

这一行看起来十分一般,仅仅简略的用停止时刻减去开端时刻,然后赋值给process_time。为什么会回来非0值呢?

本来,expr指令有一个小小的trick,当expr表达式中的核算成果为0时,expr指令就会回来1,而不是一般的0。在咱们实践的CI使命中,一旦某个项目编译时刻十分短,在1秒钟内完结,那么起止时刻体系,其差值也就为0,因而,expr就会回来非零值,而CI脚本也会因而而退出。

以上这篇浅谈CI脚本反常退出问题定位便是小编共享给我们的全部内容了,期望能给我们一个参阅,也期望我们多多支撑真钱棋牌网。

Linux查找处理文件名后包括空格的文件(两种办法)
当Linux下文件名中呈现空格这类特殊状况话,怎样查找或承认那些文件名后有空格呢?又怎样批量替换处理掉这些空格呢?办法1:输入文件名后运用Tab

shell编程跨服务器备份文件
本文实例为我们共享了shell跨服务器备份文件的具体代码,供我们参阅,具体内容如下需求:查询某个文件夹下的一切文件,将文件修正时刻小于当时时

经过Spring Shell 开发 Java 指令行运用
说到Java,我们都会想到Java在服务器端运用开发中的运用。实践上,Java在指令行运用的开发中也有一席之地。在许多状况下,相对于图形用户界面来说

本周排行

更新排行

强悍的草根IT技能社区,这儿应该有您想要的! 友情链接:b2b电子商务
Copyright © 2010 ystekkfj.com. All Rights Rreserved  京ICP备05050695号