Linux教程

Jenkins 构建后执行 nohup 脚本,前台不退出

本文主要是介绍Jenkins 构建后执行 nohup 脚本,前台不退出,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Jenkins 简介

Jenkins自动化部署可以解决集成、测试、部署等重复性的工作,工具集成的效率明显高于人工操作;并且持续集成可以更早的获取代码变更的信息,从而更早的进入测试阶段,更早的发现问题,这样解决问题的成本就会显著下降:持续集成缩短了从开发、集成、测试、部署各个环节的时间,从而也就缩短了中间出现的等待时间;持续集成也意味着开发、集成、测试、部署得以持续。

Jenkins是一个用Java编写的开源的持续集成工具。官方网站:jenkins.io

Jenkins能实时监控持续集成过程中所存在的问题,提供详细的日志文件和提醒功能,还能用图表的形式,形象地展示项目构建的趋势和稳定性。

1 脚本内容

#!/bin/bash

cat /dev/null > nohup.out

NUM=`netstat -tunlp | grep 8000 | wc -l`

if [ ${NUM} -eq 0 ];then

echo "Service not start.starting......."

    nohup python36 /data/webPage/manage.py runserver 0.0.0.0:8000 &

else

  echo "Service already run on 0.0.0.0:8000"

fi



脚本内容很简单,就是检测 8000 端口是否监听,没有监听的话尝试启动服务,监听的话就正常退出即可。

2 问题

Jenkins 构建拉取代码后,将代码通过 Publish Vver SSH 插件推送到业务机器,然后执行脚本时,脚本中的 nohup 命令无法正常退出,导致构建任务前台卡住。如图:

http://img4.sycdn.imooc.com/612232b00001448a08680214.jpg

3 排查

查询后发现:

Since you are executing a script from a non-TTY environment; The Jenkins is not able to get the exit properly, out of your script.What you want is to exit immediately, after script execution! Don’t want to wait for the entire timeout to happen and then disconnect improperly!

意为:

从一个非 tty 环境执行脚本;Jenkins 不能正常从你的脚本中退出

4 解决

在PTY中使用Exec

http://img1.sycdn.imooc.com/612232b100012e9413480882.jpg

http://img4.sycdn.imooc.com/612232b10001314c09820695.jpg虽然构建完成了,但是服务却没有启动,可能的原因是因为,在执行openapi start命令时,刚启动,pty(伪终端)就断开连接,

解决的办法就是,加 nohup 让脚步在后台运行,也就即使伪终端断开了,项目依然可以启动完成。

http://img2.sycdn.imooc.com/612232b10001d50b08010617.jpg


作者:Honest1y
链接:https://juejin.cn/post/6998823837559160869
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


这篇关于Jenkins 构建后执行 nohup 脚本,前台不退出的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!