Jenkins踩坑之旅:nohup後臺執行shell命令
有時我們希望將某個命令放在後臺執行,然後並行(非同步)執行其他命令。但在Jenkins上很容易遇到無法真正將命令放到後臺執行的問題。
原因是pipeline在退出node{}的時候,會預設清理自己發出的每個shell命令,即使使用了nohup。
例如如下程式碼無法在後續的程式查詢中找到top程式
pipeline {
agent {
label 'master'
}
stages {
stage('Example') {
steps {
script {
node("vm-1") {
sh "nohup top -b > /dev/null &"
}
node("vm-1") {
sh "ps -ef | grep top"
}
}
}
}
}
}
執行結果如下
[Pipeline] sh
+ grep top
+ ps -ef
tengrui 21907 21904 0 06:10 ? 00:00:00 grep top
解決方法是加入環境變數BUILD_ID=DONTKILLME
pipeline {
agent {
label 'master'
}
stages {
stage('Example') {
steps {
script {
node("vm-1") {
sh "BUILD_ID=dontKillMe nohup top -b > /dev/null &"
}
node("vm-1") {
sh "ps -ef | grep top"
}
}
}
}
}
}
執行結果如下
[Pipeline] sh
+ ps -ef
+ grep top
tengrui 21915 1 1 06:11 ? 00:00:00 top -b
tengrui 21925 21922 0 06:11 ? 00:00:00 grep top
注:
- 當pipeline退出node{}程式碼塊的時候,才會清理shell程式
- 也可以使用JENKINS_NODE_COOKIE=dontKillMe
相關文章
- 用nohup命令程式在後臺執行
- Linux nohup:後臺不掛起命令(後臺執行命令)Linux
- linux後臺執行命令:&與nohup的用法Linux
- Linux後臺執行指令碼命令之nohupLinux指令碼
- 使用nohup命令讓linux程式後臺執行Linux
- linux後臺執行-nohupLinux
- windows的nohup後臺執行Windows
- Nohup命令讓Linux下的程式在後臺執行 - 轉Linux
- shell:nohup (在系統後臺不掛起地執行命令,退出終端不會影響程式的執行)
- shell後臺執行
- Jenkins踩坑之旅:使用Date物件產生RejectedAccessExceptionJenkins物件Exception
- 使用nohup讓程式永遠後臺執行
- jenkins後臺程式執行Jenkins
- nohup在後臺常駐執行php指令碼PHP指令碼
- Vue踩坑之旅——VuexVue
- Vue踩坑之旅——methodsVue
- HBase PageFilter踩坑之旅Filter
- Python踩坑之旅其一殺不死的Shell子程式Python
- jenkins 遷移踩坑Jenkins
- FLUTTER混合工程踩坑之旅Flutter
- mpvue小程式踩坑之旅Vue
- vue系列之踩坑之旅Vue
- 【Linux&Unix】使用nohup讓程式永遠後臺執行Linux
- Linux 後臺執行命令Linux
- linux命令後臺執行Linux
- java 執行shell命令及日誌收集避坑指南Java
- 還在用nohup? 來試試Supervisor吧 -Linux後臺執行Linux
- laradock-的踩坑之旅
- Linux 下後臺執行和按照守護程式方式後臺執行的坑Linux
- Linux 命令的後臺執行Linux
- Jenkins郵箱配置踩坑錄Jenkins
- linux 中的 nohup 命令(設定後臺程式): nohup: ignoring input and appending output to ‘nohup.out’LinuxAPP
- [linux] 使用Screen後臺執行命令Linux
- Java執行shell、cmd命令Java
- shell 下執行mysql 命令MySql
- 移動端 Web 開發踩坑之旅Web
- HTML5 錄音的踩坑之旅HTML
- 【OS】Linux命令如何放到後臺執行Linux