젠킨스에 원격 서버 서비스에 쉘 스크립트를 사용하여 nohup을 배포 항아리

먼저 게시, 나는 마지막 핵심 구성 젠킨스했다

#停止服务,备份jar
ssh -p 22 [email protected] 'bash -s ' < /opt/auto-deploy-scripts/remove_alk_test_api.sh /opt/jar/ alk-wxapi-test.jar

#copy jar
scp -P22 /mnt/jenkins/workspace/alk_api_test_auto_deploy/target/uberjar/alk-wxapi-test.jar [email protected]:/opt/jar/

#重启服务
ssh -p 22 [email protected] 'bash -s' < /opt/auto-deploy-scripts/start_alk_test_api.sh /opt/jar/ alk-wxapi-test.jar

remove_alk_test_api.sh 스크립트 :

#!/bin/bash
#获取第一个参数,jar包路径,先备份,再发布
jar_path=$1
#!编译好的jar包名称
jar_name=$2
file=$jar_path$jar_name
bak_file=$jar_name.`date +%Y%m%d%H%M%S`
bak_path="bak/"

if [ $jar_name == ""  ] ;then

echo " jar name is null"
exit 5

else
echo "================== service stop start======================="
pid=`ps -aux | grep $jar_name | grep -v bash |grep -v grep | awk '{print $2}'`
if [ -n "${pid}" ]
then
#!kill -9 强制终止
   echo "kill -9 的pid:" $pid
   kill -9 $pid
fi
echo "================== service stop end ======================="

echo "service stop successed!"
echo "================== jar backup start ======================="

#!将现有的jar备份后,将新的jar包替换
cd $jar_path
echo "file origin is: $file"
echo "backup jar is: $jar_path$bak_path"
if [ -f "$file" ]
then
mv $jar_name $bak_file
cp $bak_file $jar_path$bak_path
fi

echo "================== jar backup end ======================="
fi

start_alk_test_api.sh 스크립트를 읽

#!/bin/bash
#!启动应用
echo "================== startup start ======================="
#获取第一个参数,jar包路径,先备份,再发布
jar_path=$1
#!编译好的jar包名称
jar_name=$2
file=$jar_path$jar_name

#远程执行该脚本时改变了环境变量,找不到java的环境变量,提示:nohup: failed to run command ‘java’: No such file or directory
#所以需要加上以下java的环境变量,其中JAVA_HOME的值,可以通过执行命令echo $JAVA_HOME得到,每个人的java环境变量设置不一样
#该问题参考自:https://stackoverflow.com/questions/20791846/zookeeper-not-starting-nohup-error
export JAVA_HOME=/usr/local/java/jdk1.8.0_151
export PATH=$JAVA_HOME/bin:$PATH

echo "授予当前用户权限"
#chmod 777 $file
echo "执行....."
cd $jar_path
nohup java -jar $file > ${jar_path}/log/nohup.log 2>&1 &
echo "启动jar的命令: nohup java -jar $file > ${jar_path}log/nohup.log 2>&1 & "
echo "================== startup end ======================="

remove_alk_test_api.sh그리고 start_alk_test_api.sh젠킨스 서버에, 당신이 수행 0.0.0.0이 두 말초 쉘 (안 노출)가 필요
권리를 Keguan의 눈에, 당신은 그것을 볼, 단순히 언급 할 가치가없는 느낌 첫째, 걱정하지 마세요 닭 요리의 문제를 검색 11 세 내 말을 들어 훨씬도 있습니다합니다.

1, 첫 번째 질문 : | 추신 -ef 초과 PID에서 발견 그렙 xxx.jar
현상 : 0.0.0.0 상향 링크는 ps -ef | grep alk-wxapi-test.jar | grep -v grep | awk '{print $2}'단지 PID에서 발견 될 수 있지만 쉘 스크립트로이 단어는 로컬 명령을 사용하여 원격 실행, 3 PID를 찾을 수 있지만, 때 오류 연속 실패합니다.
이제 우리는 이유를 알고,하지만 문제는 참으로 있었다.
그것은 재현 불편 해결하고 라인에 따라서 설명하고있다.
그 이유는이 명령에 쉘이 떠들썩한 파티를 통해 원격으로 실행되기 때문에 다른 발견 관련이없는 사실 PID 강타는, GREP은 자체 그렙 (제외 할뿐만 아니라 그러므로 grep -v grep)도 (외국 bash는 제외를 grep -v bash)
마지막 명령은 다음과 같습니다

pid=`ps -aux | grep $jar_name | grep -v bash |grep -v grep | awk '{print $2}'`

nohup을 자바 -jar을 갖는 2 원격 스크립트 실행은 오류가 발생 nohup: failed to run command ‘java’: No such file or directory
nohup을 자바 환경 변수가 판독되지 않기 때문이고, 방법은 nohup을 실행하기 전에 추가 될

export JAVA_HOME=/usr/local/java/jdk1.8.0_151
export PATH=$JAVA_HOME/bin:$PATH

3. 기타 아이디어

  • 서버에 대한 서비스 구성의 항아리 서비스를 사용 systemctl 정지, 등등을 시작합니다.
  • 고정 표시기 배포 서비스를 사용합니다.

둘은 좋은 아이디어이며, 의심 할 여지없이이이, 여기에서 체험 할 수있는 기회를 가질 수있다.

참조 :

추신 -ef | 쉘 쉬 스크립트에 -v 보이는 효과 그렙?
리눅스에서 구덩이에서 발생 사육사 클러스터 구조
nohup을이 : 명령 이상이 해결 실행할 수 없습니다
시작하지 사육사를 nohup을 오류

HTTPS : //www.jianshu.com/p/34708c0fde16 재현

추천

출처blog.csdn.net/weixin_34289744/article/details/91189854