最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux Shell腳本語句執(zhí)行失敗,后續(xù)語句繼續(xù)執(zhí)行的問題及解決

 更新時間:2023年06月17日 09:30:00   作者:Tornado_Liao  
這篇文章主要介紹了Linux Shell腳本語句執(zhí)行失敗,后續(xù)語句繼續(xù)執(zhí)行的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Linux Shell腳本語句執(zhí)行失敗,后續(xù)語句繼續(xù)執(zhí)行

問題

寫了一個自動部署java后端的腳本,大致如下:

A=password
read -p "請輸入密碼:" PASSWD
if [ "$PASSWD" == "$A" ]
then
    echo "密碼正確!"
    cd /auto_deployment/javaBackendPath/backendService
    git clean -f -d
    git reset --hard HEAD
    git pull
    mvn clean install -Dmaven.test.skip=true -Pprod
    if [ $? -eq 0 ]
    then
        echo "Succeed in building new commits."
        # 執(zhí)行部署代碼
    fi
else
    echo "密碼錯誤,請重啟輸入!"
fi

由于shell腳本和python這些語言執(zhí)行時,不太一樣。遇到錯誤和未成功執(zhí)行的語句后并不會報錯退出,而是會報錯,然后繼續(xù)執(zhí)行后續(xù)的語句。

上段代碼因為需要進(jìn)入的“/auto_deployment/javaBackendPath/backendService”路徑?jīng)]有找到,就沒有執(zhí)行,而是再當(dāng)前的目錄下執(zhí)行了之后git相關(guān)的語句,好巧不巧當(dāng)前目錄再半年前是設(shè)置過git但一直沒有更新維護(hù)過的,整個文件夾就恢復(fù)到了半年前的樣子,后面寫的文件全部消失。最后是從當(dāng)天的備份中還原回來的,花了4個小時。

解決方法

set -o errexit #增加這句話,出錯之后就會退出啦
set -e #這句話和上一句是一樣的,寫一個就好了
A=password
read -p "請輸入密碼:" PASSWD
if [ "$PASSWD" == "$A" ]
then
    echo "密碼正確!"
    cd /auto_deployment/javaBackendPath/backendService
    git clean -f -d
    git reset --hard HEAD
    git pull
    mvn clean install -Dmaven.test.skip=true -Pprod
    if [ $? -eq 0 ]
    then
        echo "Succeed in building new commits."
        # 執(zhí)行部署代碼
    fi
else
    echo "密碼錯誤,請重啟輸入!"
fi

linux shell腳本執(zhí)行完第一行命令完成后,在執(zhí)行第二行命令問題處理

這段時間在給tomcat做日志分割,再使用定時任務(wù)去執(zhí)行shell腳本時,發(fā)現(xiàn)切割后的日志文件老是被置空,手動執(zhí)行shell腳本卻沒有任何問題。

下面為shell腳本內(nèi)容

# 復(fù)制日志文件內(nèi)容到新的文件中
cp /home/work/tomcat/logs/catalina.out /home/work/tomcat/logs/catalina_`date -d '-1 days' +%Y%m%d`.log
# 清空tomcat默認(rèn)日志輸出文件
echo "" > /home/work/tomcat/logs/catalina.out

在多次測試后,發(fā)現(xiàn)是復(fù)制日志還沒完成時,就已經(jīng)將清空日志的命令給執(zhí)行了。導(dǎo)致直接將空日志給復(fù)制到每天的日志文件里去了。

因此這個問題就變成了如何在shell腳本執(zhí)行完第一條命令完成后,在執(zhí)行第二條。

這個問題也挺常見的,經(jīng)常出現(xiàn)于上一個命令對一個文件處理沒有完成就進(jìn)行了下一個命令對該文件進(jìn)行操作的場景。

網(wǎng)上有很多方法

如:

① 在兩條命令之間添加 &&

實測在這個場景中無效

②使用if else 或者 while,利用執(zhí)行的結(jié)果去判斷命令是否執(zhí)行完成,然后進(jìn)行下一步操作

覺得太過麻煩,沒有進(jìn)行測試

后續(xù)處理:

①分開使用兩個shell腳本,然后分兩次定時任務(wù)調(diào)用。

即將上一個shell腳本的兩條命令分割成兩個shell腳本,然后在定時任務(wù)里分別對兩個shell腳本設(shè)定時任務(wù)執(zhí)行即可。

②在shell腳本里使用延遲等待sleep(單條腳本服務(wù)過多可能依舊會發(fā)生日志置空問題)

# 復(fù)制日志文件內(nèi)容到新的文件中
cp /home/work/tomcat/logs/catalina.out /home/work/tomcat/logs/catalina_`date -d '-1 days' +%Y%m%d`.log
# 延遲等待3秒
sleep 3
# 清空tomcat默認(rèn)日志輸出文件
echo "" > /home/work/tomcat/logs/catalina.out

執(zhí)行完上個命令后,延時等待相應(yīng)時間再執(zhí)行下一個命令

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一個Shell小腳本精準(zhǔn)統(tǒng)計Mysql每張表的行數(shù)實現(xiàn)

    一個Shell小腳本精準(zhǔn)統(tǒng)計Mysql每張表的行數(shù)實現(xiàn)

    這篇文章主要介紹了一個Shell小腳本精準(zhǔn)統(tǒng)計Mysql每張表的行數(shù)實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Linux中多線程詳解及簡單實例

    Linux中多線程詳解及簡單實例

    這篇文章主要介紹了Linux中多線程詳解及簡單實例的相關(guān)資料,這里對線程概念及優(yōu)缺點(diǎn)做了詳細(xì)介紹并說明如何創(chuàng)建和應(yīng)用,需要的朋友可以參考下
    2017-07-07
  • shell腳本編程之循環(huán)語句學(xué)習(xí)筆記

    shell腳本編程之循環(huán)語句學(xué)習(xí)筆記

    這篇文章主要介紹了shell腳本編程之循環(huán)語句學(xué)習(xí)筆記,本文內(nèi)容較簡單,可以作為shell循環(huán)語句的備忘錄,忘記怎么寫時來看看吧~需要的朋友可以參考下
    2014-09-09
  • Shell之免交互的實現(xiàn)

    Shell之免交互的實現(xiàn)

    本文主要介紹了Shell之免交互的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Linux Shell腳本的編程之正則表達(dá)式

    Linux Shell腳本的編程之正則表達(dá)式

    這篇文章主要介紹了Linux Shell腳本的編程之正則表達(dá)式的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-11-11
  • 同一個文件在windows和linux下計算md5哈希不一致的原因及解決方法

    同一個文件在windows和linux下計算md5哈希不一致的原因及解決方法

    下面小編就為大家?guī)硪黄粋€文件在windows和linux下計算md5哈希不一致的原因及解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 建立基于虛擬用戶的VSftpd服務(wù)

    建立基于虛擬用戶的VSftpd服務(wù)

    這篇文章主要介紹了建立基于虛擬用戶的VSftpd服務(wù)的相關(guān)資料,需要的朋友可以參考下
    2015-09-09
  • 在 SHELL 腳本中調(diào)用另一個 SHELL 腳本的方法(報錯: go:not found)

    在 SHELL 腳本中調(diào)用另一個 SHELL 腳本的方法(報錯: go

    在Linux平臺上開發(fā),經(jīng)常會在console(控制臺)上執(zhí)行另外一個腳本文件,經(jīng)常用的方法有:./my.sh 或 source my.sh 或 . my.sh;這三種方法有什么不同呢?這篇文章主要介紹了在 SHELL 腳本中調(diào)用另一個 SHELL 腳本的方法(報錯: go:not found),需要的朋友可以參考下
    2023-08-08
  • expect中為send語句上加變量的代碼

    expect中為send語句上加變量的代碼

    expect中為send語句上加變量,感興趣的朋友可以看看
    2013-02-02
  • linux啟動流程詳細(xì)介紹

    linux啟動流程詳細(xì)介紹

    這篇文章主要介紹了linux啟動流程詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-05-05

最新評論

乳源| 南安市| 城步| 天门市| 灵丘县| 东港市| 二连浩特市| 安龙县| 河池市| 寿光市| 盘锦市| 栾川县| 金湖县| 白水县| 岢岚县| 扬中市| 阿克陶县| 齐河县| 星子县| 宜昌市| 图们市| 游戏| 伊吾县| 玉溪市| 巫山县| 曲沃县| 凌云县| 新龙县| 沙坪坝区| 镶黄旗| 上犹县| 屯门区| 桐梓县| 离岛区| 东港市| 宿迁市| 正阳县| 宣武区| 龙海市| 郎溪县| 五家渠市|