Jenkins任務啟動的后台進程被自動kill


在Jenkins的使用中,遇到過的一個場景是:在web代碼更改之后,能自動的部署到測試服務器,我們寫了run.sh腳本來重啟服務,在使用Jenkins的任務自動跑這個腳本后發現,服務沒有起來。開始以為是run.sh腳本的問題,但是直接執行是沒有問題的;之后一直查運行環境差異,發現也不是這個原因;到后來才懷疑到Jenkins任務結束時候自動關掉了所有的子進程。通過以下shell腳本片段解決了問題:

#臨時改變BUILD_ID值,使得Jenkins不會找到並結束掉run.sh啟動的后台進程
OLD_BUILD_ID=$BUILD_ID
echo $OLD_BUILD_ID
BUILD_ID=dontKillMe
./run.sh restart
#改回原來的BUILD_ID值
BUILD_ID=$OLD_BUILD_ID
echo $BUILD_ID

問題的根本在於是Jenkins使用processTreeKiller殺掉了所有子進程,而且這是Jenkins的默認行為。其實回頭來看這個問題,就發現Jenkins的做法非常合理。當一次build異常結束,或被人終止時,必然需要結束所有這次build啟動的子進程。下面的link提供了更多細節,以及解決方法。https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM