jenkins使用shell腳本執(zhí)行nohup java -jar包失敗

一窄绒、問(wèn)題

通過(guò)jenkins執(zhí)行shell腳本時(shí)沐鼠,腳本中是通過(guò)nohup java -jar &的方式啟動(dòng)肝箱,顯示執(zhí)行成功,但是服務(wù)卻沒(méi)啟動(dòng),腳本如下:

#! /bin/bash
nohup java -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m -jar /usr/local/joshua317-test-core-1.0-SNAPSHOT.jar &

也就是說(shuō)當(dāng)通過(guò)Jenkins構(gòu)建完后推送到業(yè)務(wù)服務(wù)器绵载,在執(zhí)行腳本時(shí)拥坛,腳本中的 nohup 命令無(wú)法正常退出,構(gòu)建前臺(tái)任務(wù)就卡住了尘分,或者是nohup總是無(wú)效猜惋。

二、排查

1.在業(yè)務(wù)服務(wù)器上直接執(zhí)行腳本培愁,可以正常運(yùn)行著摔,說(shuō)明腳本的問(wèn)題不大,但是一旦結(jié)合jenkins進(jìn)行發(fā)布定续,雖然jenkins顯示成功谍咆,但是shell腳本并沒(méi)有執(zhí)行。

2.找一個(gè)簡(jiǎn)單的腳本進(jìn)行測(cè)試

#! /bin/bash
echo "hello" >> /usr/local/test.txt

/usr/local/test.txt中有內(nèi)容私股,說(shuō)明腳本是可以執(zhí)行成功摹察,同時(shí)也說(shuō)明jenkins在執(zhí)行帶有nohup腳本的時(shí)候出現(xiàn)了問(wèn)題。也就是說(shuō)構(gòu)建命令中如果帶有 nohup xxx & 觸發(fā)構(gòu)建后并構(gòu)建成功后,雖然但在構(gòu)建任務(wù)的輸出中卻顯示沒(méi)有問(wèn)題,也沒(méi)有任何報(bào)錯(cuò)倡鲸,但是并沒(méi)有執(zhí)行shell腳本供嚎。

三、原因

jenkins默認(rèn)會(huì)在構(gòu)建完成后峭状,殺掉構(gòu)建過(guò)程中由shell命令觸發(fā)的衍生進(jìn)程克滴。

jenkins根據(jù)BUILD_ID識(shí)別某個(gè)進(jìn)程是否為構(gòu)建過(guò)程的衍生進(jìn)程,故修改BUILD_ID后优床,jenkins就無(wú)法識(shí)別是否為衍生進(jìn)程劝赔,則此進(jìn)程能在后臺(tái)保留運(yùn)行。

結(jié)論就是Jenkins程序只負(fù)責(zé)運(yùn)行偽命令行nuhup 命令胆敞,并不保證是否成功運(yùn)行 nuhup后面的命令着帽。

四杂伟、解決

(1)使用 BUILD_ID=xxx ,其中xxx可以是任意內(nèi)容(只要不是原來(lái)的BUILD_ID內(nèi)容即可),同時(shí)需要把nohup輸出內(nèi)容重定向到文件里面,如"/usr/local/nohup.out"

#! /bin/bash
BUILD_ID=dontKillMe
nohup java -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m -jar /usr/local/joshua317-test-core-1.0-SNAPSHOT.jar  > /usr/local/nohup.out 2>&1 &

(2)使用at now代替nohup命令仍翰。

#! /bin/bash
#so "at now" will run even if java -jar fails
set +e 
#Run java app in background
echo "java -jar /usr/local/joshua317-test-core-1.0-SNAPSHOT.jar" | at now

set -e : 執(zhí)行的時(shí)候如果出現(xiàn)了返回值為非零赫粥,整個(gè)腳本 就會(huì)立即退出

set +e: 執(zhí)行的時(shí)候如果出現(xiàn)了返回值為非零將會(huì)繼續(xù)執(zhí)行下面的腳本

五、擴(kuò)展

1.Jenkins里執(zhí)行shell腳本時(shí)歉备,要注意使用全路徑

/bin/sh /usr/local/service/start.sh

2.shell腳本文件的第一行要聲明是shell腳本

#! /bin/bash
....

3.使用jenkins執(zhí)行shell腳本時(shí)傅是,如果有nohup命令時(shí)匪燕,需要加上BUILD_ID=dontKillMe以及nohup后面

需要后面加上2>&1 &

注意:BUILD_ID=后面可以是其他內(nèi)容蕾羊,比如BUILD_ID=joshua317

#! /bin/bash
BUILD_ID=dontKillMe
nohup java -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m -jar /usr/local/joshua317-test-core-1.0-SNAPSHOT.jar  > /usr/local/nohup.out 2>&1 &

4.如果遇到[Build step 'Send files or execute commands over SSH' changed build result to UNSTABLE] 基本上是因?yàn)閟hell腳本寫(xiě)的有問(wèn)題。

5.關(guān)于nohup后面加上的說(shuō)明

(1)命令結(jié)尾沒(méi)有 "&"帽驯,則變成 "java -jar xxx.jar" 龟再,表示在當(dāng)前shell窗口,可按CTRL + C打斷程序運(yùn)行尼变,或者直接關(guān)閉窗口利凑,則程序直接退出
命令結(jié)尾添加 "&" ,則變成 "java -jar xxx.jar &"嫌术,表示在當(dāng)窗口關(guān)閉時(shí)哀澈,程序才會(huì)中止運(yùn)行。&代表讓該命令在后臺(tái)執(zhí)行度气。

java -jar /usr/local/joshua317-test-core-1.0-SNAPSHOT.jar &

(2)命令 "nohup java -jar xxx.jar &"部分割按,表示不掛斷運(yùn)行命令,當(dāng)賬戶退出或終端關(guān)閉時(shí),程序仍然運(yùn)行。注意磷籍,該作業(yè)的所有輸出被重定向到nohup.out的文件中适荣。

命令 “nohup java -jar xxx.jar > nohup.out &” 部分,表示不掛斷運(yùn)行命令,當(dāng)賬戶退出或終端關(guān)閉時(shí),程序仍然運(yùn)行院领,并且該作業(yè)的所有輸出被重定向到nohup.out的文件中弛矛。“ > nohup.out ” 該命令就是指定日志輸出的文件比然。
">>"表示將輸出以追加的方式重定向到nohup.out中丈氓。

nohup java -jar /usr/local/joshua317-test-core-1.0-SNAPSHOT.jar > /usr/local/nohup.out &

#或者
nohup java -jar /usr/local/joshua317-test-core-1.0-SNAPSHOT.jar >> /usr/local/nohup.out &

(3)標(biāo)準(zhǔn)輸入文件(stdin):stdin的文件描述符為0,Unix程序默認(rèn)從stdin讀取數(shù)據(jù)强法。
標(biāo)準(zhǔn)輸出文件(stdout):stdout 的文件描述符為1扒寄,Unix程序默認(rèn)向stdout輸出數(shù)據(jù)。
標(biāo)準(zhǔn)錯(cuò)誤文件(stderr):stderr的文件描述符為2拟烫,Unix程序會(huì)向stderr流中寫(xiě)入錯(cuò)誤信息该编。
屏蔽輸出,起到禁止輸出作用:/dev/null 是一個(gè)特殊的文件硕淑,寫(xiě)入到它的內(nèi)容都會(huì)被丟棄课竣;如果嘗試從該文件讀取內(nèi)容嘉赎,那么什么也讀不到。但是 /dev/null 文件非常有用于樟,將命令的輸出重定向到它公条,會(huì)起到"禁止輸出"的效果∮厍“> /usr/local/nohup.out 2>&1” :表示將 stdout 和 stderr 合并后重定向到"/usr/local/nohup.out"中靶橱。

nohup java -jar /usr/local/joshua317-test-core-1.0-SNAPSHOT.jar > /usr/local/nohup.out 2>&1 &
或者
nohup java -jar /usr/local/joshua317-test-core-1.0-SNAPSHOT.jar >> /usr/local/nohup.out 2>&1 &
或者
nohup java -jar /usr/local/joshua317-test-core-1.0-SNAPSHOT.jar > /dev/null 2>&1 &

6.linux的at一次性定時(shí)任務(wù)的使用

使用at只能執(zhí)行一次性任務(wù);使用at命令需要開(kāi)啟atd進(jìn)程路捧。

(1)安裝at命令:

查看是否開(kāi)啟atd進(jìn)程:

ps -ef | grep atd

如果沒(méi)有需要安裝at命令

yum -y install at

(2)設(shè)置自動(dòng)啟動(dòng)at命令

chkconfig --level 35 atd on

(3)啟動(dòng)atd進(jìn)程

service atd start

如果在使用at命令后关霸,報(bào)如下錯(cuò)誤:

Can't open /var/run/atd.pid to signal atd. No atd running?意思是atd進(jìn)程沒(méi)有運(yùn)行,需要執(zhí)行啟動(dòng)atd進(jìn)程命令:service atd start

(4)簡(jiǎn)單的使用

#1.顯示版本信息
at -V
#2.查看延時(shí)任務(wù)列表
at -l 
#3.查看任務(wù)內(nèi)容
at -c 任務(wù)號(hào)
#4.刪除任務(wù)
at -r 任務(wù)號(hào)
#5. now +時(shí)間杰扫,時(shí)間以minutes队寇、hours、days或weeks為單位章姓,比如“now +5 days”代表命令在5天之后的此時(shí)此刻執(zhí)行
#(1)立即執(zhí)行
at now
#(2)一分鐘后執(zhí)行
at now +1min
#(3)五天后執(zhí)行
at now +5 days
#(4)設(shè)置5天后晚上00:00執(zhí)行
at 00:00 +5 days
#(5)設(shè)置在2022年7月20號(hào)凌晨01:00執(zhí)行
at 01::00 2022-7-20

#6.管道方式執(zhí)行一次任務(wù)
echo hello>/usr/local/at.txt|at now
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末佳遣,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子凡伊,更是在濱河造成了極大的恐慌零渐,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件系忙,死亡現(xiàn)場(chǎng)離奇詭異诵盼,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)笨觅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)拦耐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人见剩,你說(shuō)我怎么就攤上這事杀糯。” “怎么了苍苞?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵固翰,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我羹呵,道長(zhǎng)骂际,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任冈欢,我火速辦了婚禮歉铝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凑耻。我一直安慰自己太示,他們只是感情好柠贤,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著类缤,像睡著了一般臼勉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上餐弱,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天宴霸,我揣著相機(jī)與錄音,去河邊找鬼膏蚓。 笑死瓢谢,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的降允。 我是一名探鬼主播恩闻,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼艺糜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼剧董!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起破停,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤翅楼,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后真慢,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體毅臊,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年黑界,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了管嬉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡朗鸠,死狀恐怖蚯撩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情烛占,我是刑警寧澤胎挎,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站忆家,受9級(jí)特大地震影響犹菇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜芽卿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一揭芍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧卸例,春花似錦称杨、人聲如沸流酬。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)芽腾。三九已至,卻和暖如春页衙,著一層夾襖步出監(jiān)牢的瞬間摊滔,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工店乐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留艰躺,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓眨八,卻偏偏與公主長(zhǎng)得像腺兴,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子廉侧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容