• 【java】Linux上运行jar包的几种方式


    一、方式

    1、一般分文两种,一种是打成war包放到tomcat里面;另一种就是打成jar包直接运行,jar包里面自带tomcat;根据自己需要来决定使用哪种方式,这里我使用的是jar包方式

    二、启动

    1、直接启动:java -jar demo.jar

    这种启动方式适合自己测试,因为一般部署在Linux上,这种方式关闭会话窗口或者ctrl+c都会关闭Java

    2、后台启动:java -jar demo.jar &

    这种方式会在后台静默运行,关闭会话窗口会中断Java,和上一种一样,这两个日志都是打印在窗口的,关闭会话就没了

    3、nohup启动:nohup java -jar demo.jar &

    这种会把日志打印到nohup.out文件中,但只会打印标准输出不会打印错误输出,关闭通过pid号来kill掉

    4、nohup启动:nohup java -jar demo.jar>/root/demo.log 2>&1 &

    这种会把普通输出和错误输出都打印到demo.log中

    # 启动/停止等脚本
    #!/bin/sh

    ENV=dev
    APP_HOME="你的项目路径"
    APP_NAME=MyDemo
    RUNNING_USER=root
    LOG_DATE=`date +%Y%m%d%H%M%S`

    #创建日志路径
    if [[ ! -d "$APP_HOME/logs" ]]; then
    mkdir ${APP_HOME}/logs
    fi

    if [[ ! -f "$APP_HOME/$APP_NAME.jar" ]]; then
    echo "---------------------------------"
    echo "$APP_NAME不存在>>>>>"
    echo "---------------------------------"
    exit 1
    fi

    #实时日志
    LOG_PATH=${APP_HOME}/logs/${APP_NAME}.out

    #GC日志信息
    GC_LOG_PATH=${APP_HOME}/logs/gc-${APP_NAME}-${LOG_DATE}.log

    #JMX监控参数
    JMX="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1091 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

    #JVM启动参数
    JVM_OPTS="-Dname=$APP_NAME -Djeesuite.configcenter.profile=$ENV -Duser.timezone=Asia/Shanghai -Xms512M -Xmx512M -XX:PermSize=256M -XX:MaxPermSize=512M -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -Xloggc:$GC_LOG_PATH -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"

    APP_FILE=${APP_NAME}.jar
    pid=0

    #获取进程号
    getPid() {
    pid=`ps -ef |grep ${APP_FILE} |grep -v grep |awk '{print $2}'`
    }

    #启动服务
    start() {
    getPid
    if [[ ! -n "$pid" ]]; then
    JAVA_CMD="nohup java -jar $JVM_OPTS ${APP_HOME}/${APP_NAME}.jar >> $LOG_PATH 2>&1 &"
    echo "---------------------------------"
    su ${RUNNING_USER} -c "$JAVA_CMD"
    echo "启动中>>>>>>>"
    echo "---------------------------------"
    sleep 2s
    #tail -f ${LOG_PATH}
    else
    echo "$APP_NAME is running PID: $pid"
    fi
    }

    #停止服务
    stop() {
    getPid
    if [[ ! -n "$pid" ]]; then
    echo "$APP_NAME not running"
    else
    echo "$APP_NAME stop..."
    kill -9 ${pid}
    fi
    }

    #重启服务
    restart() {
    stop
    sleep 1s
    start
    }

    #服务状态
    status() {
    getPid
    if [[ ! -n "$pid" ]]; then
    echo "$APP_NAME not running"
    else
    echo "$APP_NAME running PID: $pid"
    fi
    }

    #查看最近100行日志
    hundred() {
    LOG_PATH=${APP_HOME}/logs/${APP_NAME}.out
    tail -100f ${LOG_PATH}
    }

    case $1 in
    start)
    start
    ;;
    stop)
    stop
    ;;
    restart)
    restart
    ;;
    status)
    status
    ;;
    log)
    hundred
    ;;
    *)
    echo "$0: Usage: $0 {start|stop|restart|status|log}"
    exit 1
    ;;
    esac
    5、系统服务启动,自带定义一个系统服务来启动,我使用的是这种

    1、创建一个系统服务文件
    vi /etc/systemd/system/demo.service

    2、输入下面信息

    [Unit]

    # 服务名称
    Description=demo Service

    # 在什么服务启动后启动
    After=syslog.target

    [Service]

    # jar包启动命令,这里java要写绝对路径
    ExecStart=/usr/local/jdk1.8.0_291/bin/java -jar /usr/local/java/demo.jar

    [Install]

    # 设置服务安装,可以设置多个,用逗号隔开
    WantedBy=multi-user.target

    3、保存
    4、执行命令
    systemctl start demo # 启动
    systemctl stop demo # 关闭
    systemctl status demo # 服务当前状态
    systemctl enable demo # 设置服务开机启动
    systemctl disable demo # 关闭服务开机启动
    systemctl restart demo # 重启服务



  • 相关阅读:
    GOIP connects with Elastix through “config by line”
    Asterisk 的安全性
    sql2005性能优化(在32位系统上突破2G内存使用量的方法) .
    Asterisk的type类型和身份认证
    Elastix GOIP 网关配合
    Elastix 安装G729 G723语音编码
    Delegate,Action,Func,匿名方法,匿名委托,事件 (转载)
    Proxmox Reset Root Password
    volatile适用场景
    ANT教程经典
  • 原文地址:https://www.cnblogs.com/zzsuje/p/16368699.html
Copyright © 2020-2023  润新知