• Linux执行脚本让进程挂掉后自动重启


    1 创建循环监听脚本  autostart.sh 

     例: 其中futures-market-server-v3andwebsoket.jar 是要监听的执行程序

    #/bin/bash
    while true;
    do
    count=`ps -ef | futures-market-server-v3andwebsoket.jar | grep -v grep|wc -l`
    if [ ${count} -lt 1 ]; then
    /./home/quant/futures/jar/futures-market-server/restart.sh restart

    fi
    sleep 20
    done

    2创建重启执行程序的脚本  restart.sh

    #!/bin/bash
    #这里可替换为你自己的执行程序,其他代码无需更改
    APP_NAME=futures-market-server-v3andwebsoket.jar
    FILE_PATH=/home/quant/futures/jar/futures-market-server

    #使用说明,用来提示输入参数
    usage() {
    echo "Usage: sh 脚本名.sh [start|stop|restart|status]"
    exit 1
    }

    #检查程序是否在运行path
    is_exist(){
    pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
    #如果不存在返回1,存在返回0
    if [ -z "${pid}" ]; then
    return 1
    else
    return 0
    fi
    }

    #启动方法
    start(){
    is_exist
    if [ $? -eq "0" ]; then
    echo "${APP_NAME} is already running. pid=${pid} ."
    else

    nohup java -jar -Xmx4g -Xms4g -XX:OnOutOfMemoryError="${FILE_PATH}/restart.sh stop" -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${FILE_PATH} ${FILE_PATH}/$APP_NAME > $(date "+%Y%m%d")".log" &
    echo "${APP_NAME} start success"
    fi
    }

    #停止方法
    stop(){
    is_exist
    if [ $? -eq "0" ]; then
    kill -9 $pid
    else
    echo "${APP_NAME} is not running"
    fi
    }

    #输出运行状态
    status(){

    is_exist
    if [ $? -eq "0" ]; then
    echo "${APP_NAME} is running. Pid is ${pid}"
    else
    echo "${APP_NAME} is NOT running."
    fi
    }

    #重启
    restart(){
    stop
    start
    }

    #根据输入参数,选择执行对应方法,不输入则执行使用说明
    case "$1" in
    "start")
    start
    ;;
    "stop")
    stop
    ;;
    "status")
    status
    ;;
    "restart")
    restart
    ;;
    *)
    usage
    ;;
    esac

    3到脚本目录  可以先执行  

    chmod a+x autostart.sh  让脚本可以在当前目录下 使用./autostart.sh 执行

    使用 nohup ./autostart.sh& 挂起当前脚本

    或者nohup sh autostart.sh&

    可以使用ps -ef|grep autostart 找到当前脚本进程号 

  • 相关阅读:
    一个十分诡异的NullReferenceException异常!
    如何去掉TabControl控件默认添加的TabPage
    GDI+发生一般性错误的解决方法
    C#中各种数组的性能比较
    酷享娱乐新生活
    关于ImageList.Images集合的特殊行为!
    WinForm窗体之间交互的一些方法
    实现单实例应用程序的三种方案
    MySql_Close 释放资源
    数组之List
  • 原文地址:https://www.cnblogs.com/yingudan/p/12454191.html
Copyright © 2020-2023  润新知