java-jar维护脚本

脚本内容

  现在越来越多的程序都用docker容器来管理了,不过依旧有很多的程序,是直接在linux上使用jar方式管理的,那么编写一个易用的脚本来管理是必不可少的。

  脚本示例:

#!/bin/bash

jar_path='/home/pro-mall/ex-pro.jar'

# JVM参数
JVM_OPTS="-Dspring.profiles.active=prod"
# JVM参数 debug模式
JVM_OPTS_DEBUG="-Dspring.profiles.active=prod -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=10000,suspend=n"

function start(){
    PID=`ps -ef |grep java|grep $jar_path|grep -v grep|awk '{print $2}'`

	if [ x"$PID" != x"" ]; then
	    echo  -e "\033[0;31m 程序 $jar_path 正在运行中,请先停止! \033[0m"
	else
	    if [[ ! -f "$jar_path" ]]; then
            echo  -e "\033[0;31m $jar_path 不存在,无法操作命令! \033[0m"
        else
            nohup java -jar $JVM_OPTS $jar_path  > /dev/null 2>&1 &
		    echo  -e "\033[0;34m 启动 $jar_path 成功!\033[0m"
        fi
	fi
}

function debug(){
    PID=`ps -ef |grep java|grep $jar_path|grep -v grep|awk '{print $2}'`

	if [ x"$PID" != x"" ]; then
	    echo  -e "\033[0;31m 程序 $jar_path 正在运行中,请先停止! \033[0m"
	else
        if [[ ! -f "$jar_path" ]]; then
            echo  -e "\033[0;31m $jar_path 不存在,无法操作命令! \033[0m"
        else
            nohup java -jar $JVM_OPTS_DEBUG $jar_path  > /dev/null 2>&1 &
		    echo -e "\033[0;34m Debug模式 启动 $jar_path 成功!端口:10000 \033[0m"
        fi
	fi
}

function stop(){
	PID=`ps -ef |grep java|grep $jar_path|grep -v grep|awk '{print $2}'`

	if [ x"$PID" != x"" ]; then
		kill -9 $PID
		echo -e "\033[0;34m $jar_path 已停止 \033[0m"
	else
		echo -e "\033[0;31m 程序 $jar_path 未启动,不能操作! \033[0m"
	fi
}

function restart(){
    stop
    sleep 2
    start
}

function status()
{
    PID=`ps -ef |grep java|grep $jar_path|grep -v grep|wc -l`
    if [ $PID != 0 ];then
        echo -e "\033[0;34m 程序 $jar_path 正在运行中 \033[0m"
        PID_NUM=`ps -ef |grep java|grep $jar_path|grep -v grep|awk '{print $2}'`
        echo -e "\033[0;34m 程序对应的PID: $PID_NUM \033[0m"
    else
        echo -e "\033[0;31m 程序 $jar_path 没有运行! \033[0m"
    fi
}

function find_help(){
    echo -e "\033[0;31m 请输入正确的操作命令! \033[0m"
    echo -e "\033[0;34m 命令参数:{start|stop|restart|status|debug} \033[0m"
    echo -e "\033[0;34m 用法: \033[0m"
    echo -e "\033[0;34m     start    启动应用程序 \033[0m"
    echo -e "\033[0;34m     stop     停止应用程序 \033[0m"
    echo -e "\033[0;34m     restart  重启应用程序 \033[0m"
    echo -e "\033[0;34m     status   查看应用程序运行状态和PID \033[0m"
    echo -e "\033[0;34m     debug    Debug模式启动应用程序 \033[0m"
    exit 1
}

if [ "$1" = "" ];then
    find_help;
    exit 1
fi

case $1 in
    start)
    start;;
    stop)
    stop;;
    restart)
    restart;;
    status)
    status;;
    debug)
    debug;;
    *)
    find_help;;
esac

设置别名

  通常情况,我们运行一个脚本,需要使用“sh + 脚本路径 + 参数”的方式,管理起来可能不太方便,所以我们一般会给他设置一个别名来管理。
  语法:

alias <别名>=<sh脚本路径>

  了解了alias命令的语法后,我们直接执行就好了吗?不是的,如果直接执行,那么在你关闭ssh终端后重新连接,命令就失效啦。
  我们需要将这个命令追加到~/.bashrc文件中,才能保证命令不会失效。
  我们来试试吧,示例:

chmod 777 /home/pro-mall/c.sh
echo "alias mall=/home/pro-mall/c.sh" >> ~/.bashrc
source ~/.bashrc

  设置好别名后的使用方法,如:

mall start
mall stop
mall debug
...