解决办法:
- 启动 Jenkins 的时候:加上 -Dhudson.util.ProcessTree.disable=true,也就是 java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war 或者 修改/etc/sysconfig/jenkins配置,在JENKINS_JAVA_OPTIONS中加入-Dhudson.util.ProcessTree.disable=true。需要重启jenkins生效
- 在后台进程前加上 BUILD_ID=dontKillMe,也就是 BUILD_ID=dontKillMe nohup npm start >/var/app/nohup.out 2>&1 & 或者在 execute shell输入框中加入BUILD_ID=DONTKILLME,即可防止jenkins杀死启动的进程
用了上面二个方法后,就解决jenkins自动杀npm进程的问题了.
shell实例:
#!/bin/bash
# 环境
ACTIVE=daily
# jar包本地maven仓库路径
JAR_PATH='/root/.m2/repository/com/test/0.0.1-SNAPSHOT/'
# 进程名
PNAME='test-0.0.1-SNAPSHOT.jar'
# 查询进程id并且杀掉
#ps -ef | grep $PNAME | grep -v grep | awk '{print $2}' | xargs kill -9
PID=$(ps -ef | grep $PNAME | grep -v grep | awk '{print $2}')
echo "start pid: $PID"
kill -9 $PID
# 启动jar包
BUILD_ID=dontKillMe nohup java -Xms500m -Xmx500m -Xmn250m -Xss256k -server -XX:+HeapDumpOnOutOfMemoryError -jar $JAR_PATH/$PNAME --spring.profiles.active=$ACTIVE &
NEW_PID=$(ps -ef | grep $PNAME | grep -v grep | awk '{print $2}')
echo "start success,new pid: $NEW_PID"
echo "------------- end ---------------"