• jenkins使用ssh remote插件执行shell后无法退出的问题处理


    现象:通过jenkins发布代码后,执行远程命令,一直卡在执行远程命令那里打转,无法退出

    脚本

    #!/bin/bash
    
    # 根据参数,执行进程的启动 停止 重启等
    #source /etc/profile
    
    # 非apache用户运行脚本,则退出
    if [ `whoami` != "apache" ];then
    echo " only apache can run me"
    exit 1
    fi
    
    
    process='bin/geo'
    
    ##############$process###############
    #1.启动 $process
    start_geo() {
        sleep 1
        pid=`ps -ef |grep $process |grep -v grep |awk '{print $2}'`
        if [ ! "$pid" ];then
            echo "Starting $process process is $process;pid is $pid "
            if [ $? -ne 0 ]; then
                echo
                exit 1
            fi
            cd /data/www/vhosts/test-api-location.aa.me/httpdocs/geo && nohup /data/www/vhosts/test-api-location.aa.me/httpdocs/geo/$process --config=config/uat_config.toml >/dev/null 2>&1 &
        sleep 2
        swoft_nu=`netstat -tnlp|grep 20109|wc -l`
            if [[ $? == 0 && ${swoft_nu} -ge 1 ]];then
                echo "start $process $process ok"
            else
                echo "start $process $process failed"
            fi
        else
            echo "$process $process is still running!"
            exit
        fi
    }
    
    #2.停止 $process
    stop_geo() {
        echo -n $"Stopping $process $process: "
        pid=`ps -ef |grep $process |grep -v grep |awk '{print $2}'`
        if [ ! "$pid" ];then
        echo "$process $process is not running"
        else
            ps -ef|grep ${process}|grep -v grep|awk '{print $2}'|xargs kill -9
        sleep 2
        swoft_nu=`netstat -tnlp|grep 20109|wc -l`
        if [[ ${swoft_nu} -lt 1 ]];then
            echo "stop $process $process ok killed $pid"
        fi
        fi
    }
    
    #3.重启 restart_geo
    restart_geo() {
        stop_geo
        start_geo
    }
    
    #4.查看 $process 状态
    status_geo(){
        pid=`ps -ef |grep $process |grep -v grep |awk '{print $2}'`
        if [ ! "$pid" ];then
            echo "geo $process is not running"
        else
            echo "geo $process is running"
        fi
    }
    
    #####################  MAIN  ###############################
    usage () {
            echo ""
            echo "  Please Input server infomation!"
            echo ""
            echo "  USAGE: `basename $0` [start|stop|restart|status]" 
            echo ""
    }
        
    
    if [ $# != 1 ]
    then
            usage >&2
            exit 1
    fi
    OPT=$1
    case $OPT in
     
    start)
            echo "start `basename $0`"
            start_geo
        ;;
    stop)
            stop_geo
        ;;
    restart)
            restart_geo
        exit 0
        ;;
    status)
            status_geo
        ;;
    *)
        echo "Usage:`basename $0`  [start|stop|restart|status]"
        exit 1
    esac

    网上有说加 exit 0,或者去掉 source /etc/profile,加nohup或者sleep 1都无效,是因为没有使用终端无法正常退出,否则程序会终止,勾选pty即可

  • 相关阅读:
    如何在android项目中引用project作为类库引用
    Unity3d之MonoBehaviour的可重写函数整理
    Phonegap hello world 不容易啊~!
    数据结构,到底如何用中学,学中用?
    自动化测试(1610)
    软件测试人员的发展路线
    软件测试分类
    我的第一篇博客随笔
    安装虚拟机和Linux系统的学习
    英雄联盟的游戏经验
  • 原文地址:https://www.cnblogs.com/reblue520/p/15136440.html
Copyright © 2020-2023  润新知