欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

問(wèn)題

寫了一個(gè)自動(dòng)部署java后端的腳本,大致如下:

A=password
read -p "請(qǐng)輸入密碼:" 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 "密碼錯(cuò)誤,請(qǐng)重啟輸入!"
fi

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

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

解決方法

set -o errexit #增加這句話,出錯(cuò)之后就會(huì)退出啦
set -e #這句話和上一句是一樣的,寫一個(gè)就好了
A=password
read -p "請(qǐng)輸入密碼:" 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 "密碼錯(cuò)誤,請(qǐng)重啟輸入!"
fi

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

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

下面為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

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

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

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

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

如:

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

實(shí)測(cè)在這個(gè)場(chǎng)景中無(wú)效

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

覺(jué)得太過(guò)麻煩,沒(méi)有進(jìn)行測(cè)試

后續(xù)處理:

①分開(kāi)使用兩個(gè)shell腳本,然后分兩次定時(shí)任務(wù)調(diào)用。

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

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

# 復(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í)行完上個(gè)命令后,延時(shí)等待相應(yīng)時(shí)間再執(zhí)行下一個(gè)命令

總結(jié)

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

相關(guān)文章

  • 詳解Linux查找目錄下的按時(shí)間過(guò)濾的文件

    詳解Linux查找目錄下的按時(shí)間過(guò)濾的文件

    這篇文章主要介紹了Linux查找目錄下的按時(shí)間過(guò)濾的文件 ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • jenkins 實(shí)現(xiàn)shell腳本化定時(shí)執(zhí)行任務(wù)的方法

    jenkins 實(shí)現(xiàn)shell腳本化定時(shí)執(zhí)行任務(wù)的方法

    這篇文章主要介紹了jenkins 實(shí)現(xiàn)shell腳本化定時(shí)執(zhí)行任務(wù),解決訪問(wèn)是jenkins構(gòu)建好之后將jar遠(yuǎn)程推送到生產(chǎn)服務(wù)器,提前退出后臺(tái)執(zhí)行服務(wù)器遠(yuǎn)程腳本,腳本通過(guò)ngnx提前切走nginx代理auction sleep 1800s,半小時(shí)后執(zhí)行更新重啟,具體操作過(guò)程跟隨小編一起看看吧
    2022-01-01
  • exit(-1)或者return(-1)shell得到的退出碼為什么是255

    exit(-1)或者return(-1)shell得到的退出碼為什么是255

    exit(-1)或者return(-1)shell得到的退出碼為是255,大家知道為什么嗎?帶著這個(gè)疑問(wèn)來(lái)腳本之家學(xué)習(xí)下吧,本篇文章告訴大家答案
    2015-10-10
  • 用shell腳本監(jiān)控進(jìn)程是否存在 不存在則啟動(dòng)的實(shí)例

    用shell腳本監(jiān)控進(jìn)程是否存在 不存在則啟動(dòng)的實(shí)例

    這篇文章主要介紹了用shell腳本監(jiān)控進(jìn)程是否存在 不存在則啟動(dòng)的實(shí)例,需要的朋友可以參考下
    2016-03-03
  • shell腳本換行問(wèn)題實(shí)戰(zhàn)記錄

    shell腳本換行問(wèn)題實(shí)戰(zhàn)記錄

    換行相信大家都不陌生,下面這篇文章主要給大家介紹了關(guān)于shell腳本換行問(wèn)題的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Linux中rpm命令用法詳解

    Linux中rpm命令用法詳解

    rpm命令是用于在基于RPM包管理系統(tǒng)的Linux發(fā)行版中安裝、查詢、升級(jí)和刪除軟件包的命令行工具,本文講給大家詳細(xì)的介紹一下Linux?rpm命令的使用方法,感興趣的同學(xué)跟著小編一起來(lái)看看吧
    2023-08-08
  • Shell實(shí)現(xiàn)批量操作文件的方法詳解

    Shell實(shí)現(xiàn)批量操作文件的方法詳解

    這篇文章主要為大家總結(jié)了一下Shell實(shí)現(xiàn)批量操作文件的命令,例如:查找某文件夾下指定文件所在的路徑、批量刪除某個(gè)文件夾下的指定文件,感興趣的可以了解一下
    2022-09-09
  • 完美解決Linux搭建sftp出現(xiàn)Write failed:Broken pipe的問(wèn)題

    完美解決Linux搭建sftp出現(xiàn)Write failed:Broken pipe的問(wèn)題

    下面小編就為大家?guī)?lái)一篇完美解決Linux搭建sftp出現(xiàn)Write failed:Broken pipe的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • 詳解Shell if else語(yǔ)句的具體使用方法

    詳解Shell if else語(yǔ)句的具體使用方法

    這篇文章主要介紹了詳解Shell if else語(yǔ)句的具體使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Linux 命令expect使用詳解

    Linux 命令expect使用詳解

    expect是由Don Libes基于Tcl語(yǔ)言開(kāi)發(fā)的,是一種腳本語(yǔ)言,主要應(yīng)用于自動(dòng)化交互式操作的場(chǎng)景,借助Expect處理交互的命令,本文給大家介紹Linux 命令expect使用詳解,感興趣的朋友一起看看吧
    2023-11-11

最新評(píng)論