LInux (Debian11) 部署Java jar包服务

1.存放服务的目录:/etc/init.d

2.服务脚本(project):

#! /bin/sh
#  /etc/init.d/project
# starts the ProjectManagerService service
### BEGIN INIT INFO
# Provides:          project
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     true
# Short-Description: Start/stop project application server
### END INIT INFO

JAVA_HOME=/usr/lib/jvm/jdk1.8
JRE_HOME=/usr/lib/jvm/jdk1.8/jre

ROOT_PATH=/usr/local/keydak/project

SERVICE_NAME=project
PATH_TO_JAR=$ROOT_PATH/ProjectManagerService.jar
PID_PATH_NAME=/tmp/$SERVICE_NAME-pid

#JAVA_OPTS="-Xms384M -Xmx384M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/oom -XX:+PrintGCDetails -Djava.rmi.server.hostname=192.168.62.125 -Dcom.sun.management.jmxremote.port=17011 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=*:7021"
JAVA_OPTS="-Xms512M -Xmx512M"
case $1 in
    start)
	echo "Starting $SERVICE_NAME ..."
	if [ ! -f $PID_PATH_NAME ]; then
	    sudo java -jar $JAVA_OPTS $PATH_TO_JAR --spring.profiles.active=prod /tmp 2>> /dev/null >> /dev/null &
	    echo $! > $PID_PATH_NAME
	    echo "$SERVICE_NAME started ..."
	else
	    echo "$SERVICE_NAME is already running ..."
	fi
	;;
    stop)
	if [ -f $PID_PATH_NAME ]; then
	    PID=$(cat $PID_PATH_NAME);
	    echo "$SERVICE_NAME stoping ..."
	    sudo kill $PID;
	    echo "$SERVICE_NAME stopped ..."
	    sudo rm $PID_PATH_NAME
	else
	    echo "$SERVICE_NAME is not running ..."
	fi
	;;
    restart)
	if [ -f $PID_PATH_NAME ]; then
	    PID=$(cat $PID_PATH_NAME);
	    echo "$SERVICE_NAME stopping ...";
	    sudo kill $PID;
	    echo "$SERVICE_NAME stopped ...";
	    sudo rm $PID_PATH_NAME
	    echo "$SERVICE_NAME starting ..."
            sudo java -jar $JAVA_OPTS $PATH_TO_JAR --spring.profiles.active=prod /tmp 2>> /dev/null >> /dev/null &
	    echo $! > $PID_PATH_NAME
	    echo "$SERVICE_NAME started ..."
	else
	    echo "$SERVICE_NAME is not running ..."
	fi
	;;
esac 

脚本头部

#! /bin/sh
#  /etc/init.d/project
# starts the ProjectManagerService service
  • #! /bin/sh:指定脚本使用的解释器。
  • 注释部分描述了脚本的功能和位置。

INIT INFO 部分

### BEGIN INIT INFO
# Provides:          project
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     true
# Short-Description: Start/stop project application server
### END INIT INFO
  • Provides:提供的服务名称。
  • Required-Start 和 Required-Stop:服务启动和停止时所需的其他服务。
  • Default-Start 和 Default-Stop:服务在这些运行级别下自动启动或停止。
  • X-Interactive:指示服务在启动或停止时是否可以交互。
  • Short-Description:服务的简短描述。

变量定义

JAVA_HOME=/usr/lib/jvm/jdk1.8
JRE_HOME=/usr/lib/jvm/jdk1.8/jre

ROOT_PATH=/usr/local/keydak/project

SERVICE_NAME=project
PATH_TO_JAR=$ROOT_PATH/ProjectManagerService.jar
PID_PATH_NAME=/tmp/$SERVICE_NAME-pid
  • JAVA_HOME 和 JRE_HOME:指定 Java 开发工具包和运行时环境的路径。
  • ROOT_PATH:项目的根目录。
  • SERVICE_NAME:服务的名称。
  • PATH_TO_JAR:指向 JAR 文件的路径。
  • PID_PATH_NAME:存储服务进程 ID 的文件路径。

Java 启动选项

JAVA_OPTS="-Xms512M -Xmx512M"
  • JAVA_OPTS:设置 Java 虚拟机的内存选项,最小和最大堆内存均为 512MB。

服务管理逻辑

case $1 in
    start)
    # 启动服务逻辑
    ;;
    stop)
    # 停止服务逻辑
    ;;
    restart)
    # 重启服务逻辑
    ;;
esac
  • 使用 case 语句处理启动、停止和重启命令。
启动服务 (start)
if [ ! -f $PID_PATH_NAME ]; then
    sudo java -jar $JAVA_OPTS $PATH_TO_JAR --spring.profiles.active=prod /tmp 2>> /dev/null >> /dev/null &
    echo $! > $PID_PATH_NAME
    echo "$SERVICE_NAME started ..."
else
    echo "$SERVICE_NAME is already running ..."
fi
  • 检查 PID 文件是否存在,如果不存在,则启动服务。
  • 使用 sudo 执行 Java 命令,重定向错误和输出到 /dev/null
  • 将进程 ID 写入 PID 文件。
停止服务 (stop)
if [ -f $PID_PATH_NAME ]; then
    PID=$(cat $PID_PATH_NAME);
    echo "$SERVICE_NAME stoping ..."
    sudo kill $PID;
    echo "$SERVICE_NAME stopped ..."
    sudo rm $PID_PATH_NAME
else
    echo "$SERVICE_NAME is not running ..."
fi
  • 检查 PID 文件是否存在,如果存在,则读取 PID 并停止服务。
重启服务 (restart)
if [ -f $PID_PATH_NAME ]; then
    PID=$(cat $PID_PATH_NAME);
    echo "$SERVICE_NAME stopping ...";
    sudo kill $PID;
    echo "$SERVICE_NAME stopped ...";
    sudo rm $PID_PATH_NAME
    echo "$SERVICE_NAME starting ..."
    sudo java -jar $JAVA_OPTS $PATH_TO_JAR --spring.profiles.active=prod /tmp 2>> /dev/null >> /dev/null &
    echo $! > $PID_PATH_NAME
    echo "$SERVICE_NAME started ..."
else
    echo "$SERVICE_NAME is not running ..."
fi

赋予脚本权限:

sudo chmod -R 777 /etc/init.d/project

移除服务系统自启

update-rc.d -f 服务名 remove

添加服务系统自启

update-rc.d 服务名 defaults

刷新系统服务修改

sudo systemctl daemon-reload

服务启动:

sudo service project start

服务停止

sudo service project stop

服务重启

sudo service project restart

检验nginx配置文件命令(校验nginx文件是否正确):

sudo nginx -t
pi@debian11:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
pi@debian11:~$ 

 出现上面内容说明 Nginx 配置文件语法是正确的,并且测试成功,可执行下方命令

 


重新加载 Nginx:

sudo systemctl reload nginx

启动 Nginx 服务:

sudo systemctl start nginx

检查 Nginx 服务的状态:

sudo systemctl status nginx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值