国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

淺談CI腳本異常退出問題定位

2019-10-26 18:55:45
字體:
來源:轉載
供稿:網友

背景

在CI腳本中,使用類似如下腳本進行項目編譯的計時,但在執行過程中,有時會出現CI腳本(命名為ci.sh)未完全執行的情況:

#!/bin/bash -esleep_time=$1start_time=`date "+%s"`# do sth, this sleep would simulate project compilationsleep $sleep_timeend_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腳本異常退出問題定位就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林站長站。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大城县| 嘉黎县| 南充市| 宁蒗| 拉孜县| 遂平县| 吉木乃县| 唐河县| 时尚| 高要市| 新乡县| 白玉县| 万宁市| 霞浦县| 林西县| 香河县| 阳江市| 松原市| 禹州市| 温州市| 茂名市| 界首市| 安远县| 廊坊市| 洞口县| 阜宁县| 芦山县| 木兰县| 嫩江县| 广灵县| 长武县| 长海县| 阿城市| 宾川县| 巧家县| 永吉县| 商河县| 邳州市| 邵武市| 石狮市| 同江市|