为了账号安全,请及时绑定邮箱和手机立即绑定

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 命令无法正常退出,导致构建任务前台卡住。如图:

https://img1.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

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

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

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

https://img1.sycdn.imooc.com//612232b10001d50b08010617.jpg


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


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消