Centos 7将java jar包自定义开机启动服务

    如果没有使用敏捷部署方式,每次服务器开机关机,都要通过 nohup java -jar hello.jar > /dev/null & 命令进行服务的启动,未免太过于繁琐,通过自定义服务的方式, 省去不少麻烦。

   1. 先上 jar包的启动脚本,

#!/bin/bash
#@author :lizhenjiang
#EMAIL:idea_zhenjiang@163.com
JAVA_HOME=/usr/local/app/jdk1.8.0_191    
PATH=$PATH:$JAVA_HOME/bin                     # shell脚本必须指定,因为脚本不会自动加载环境变量,不写的话导致出现此错误
app='/usr/local/hello/hello.jar'    #jar包的决定路径
args='-server -Xms1024m -Xmx1024m -XX:PermSize=128m -XX:SurvivorRatio=2 -XX:+UseParallelGC'  #java程序启动参数,可不写
LOGS_FILE=/dev/null                           # 把打印的日志扔进垃圾桶

cmd=$1                                        #获取执行脚本的时候带的参数
pid=`ps -ef|grep java|grep $app|awk '{print $2}'`                # 抓取对应的java进程

startup(){
  aa=`nohup java -jar $args $app >> $LOGS_FILE 2>&1 &`
  echo $aa
}

if [ ! $cmd ]; then
  echo "Please specify args 'start|restart|stop'"
  exit
fi

if [ $cmd == 'start' ]; then
  if [ ! $pid ]; then
    startup
  else
    echo "$app is running! pid=$pid"
  fi
fi

if [ $cmd == 'restart' ]; then
  if [ $pid ]
    then
      echo "$pid will be killed after 3 seconds!"
      sleep 3
      kill -9 $pid
  fi
  startup
fi

if [ $cmd == 'stop' ]; then
  if [ $pid ]; then
    echo "$pid will be killed after 3 seconds!"
    sleep 3
    kill -9 $pid
  fi
  echo "$app is stopped"
fi

写好脚本之后,需要为脚本添加可执行权限

chmod +x hello-service.sh 

2. 自定义开机启动命令

  2.1 进入到/etc/systemd/system/

    # vi hello-service.service

[Unit]
Description=hello-service
after=network.target

[Service]
User=root
Group=root
Type=forking
KillMode=process
ExecStart=/bin/sh /usr/local/hello/hello-service.sh start
ExecReload=/bin/sh /usr/local/hello/hello-service.sh restart
ExecStop=/bin/sh /usr/local/hello/hello-service.sh stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target  

2.2 添加执行权限

   # chmod +x hello-service.service

2.3 添加开机启动服务
systemctl enable hello-service.service   #添加开机启动服务

systemctl start hello-service.service     # 启动服务

systemctl stop hello-service.service    #关闭服务

systemctl restart hello-service.service   # 重启服务

systemctl status hello-service.service    #查看服务状态

systemctl disable hello-service.service    #取消开机启动

<think>嗯,用户想在CentOS 8上运行JAR,我需要根据提供的引用资料来整理步骤。首先,确保Java环境已经安装。引用[1]提到解压JDK到指定目录,可能需要检查Java版本。CentOS 8可能默认有OpenJDK,但用户可能需要特定版本,比如JDK 17,所以需要指导安装。 然后,直接运行JAR的命令应该是java -jar,如引用[3]和[4]所示。但用户可能希望后台运行,所以nohup和&是必须的,像引用[4]和[5]提到的。还需要考虑日志输出,比如重定向到output.log。 另外,开机启动的问题,引用[2]建议创建启动脚本,并可能使用systemd服务CentOS 8应该支持systemd,所以可以编写一个.service文件,设置ExecStart命令,并启用服务。可能还需要处理端口占用,比如检查防火墙设置,如引用[2]提到的端口8080。 需要注意用户是否已经配置了Java路径,如果没有,可能需要更新环境变量,像JAVA_HOME在/etc/profile里设置。还要提醒用户如果遇到权限问题,给脚本执行权限chmod +x。 最后,用户可能关心如何确认程序是否在运行,可以用ps或查看日志文件。可能的问题Java版本不兼容、权限不足、端口冲突等,需要给出排查方法。</think>### 如何在CentOS 8上运行JAR文件 #### 步骤1:安装Java环境 1. **检查是否已安装Java** 执行命令 `java -version`,若未安装或版本过低需手动安装。 CentOS 8默认仓库支持OpenJDK,可执行: ```bash sudo dnf install java-17-openjdk-devel ``` 2. **手动安装特定版本JDK(可选)** 若需安装Oracle JDK或其他版本,参考[引用1]的步骤解压到指定目录并配置环境变量: ```bash export JAVA_HOME=/java/jdk-17 export PATH=$JAVA_HOME/bin:$PATH ``` #### 步骤2:运行JAR文件 1. **基础运行命令** 直接运行JAR文件: ```bash java -jar your_application.jar ``` 此方式会占用终端窗口(关闭终端则程序终止)[^3]。 2. **后台运行并记录日志** 使用`nohup`命令实现后台运行,并将日志输出到文件: ```bash nohup java -jar your_application.jar > output.log 2>&1 & ``` 关闭终端后程序仍继续运行[^4][^5]。 #### 步骤3:高级配置(可选) 1. **自定义JVM参数** 通过`-Xmx`和`-Xms`设置内存限制: ```bash nohup java -Xmx512m -Xms256m -jar your_application.jar > output.log 2>&1 & ``` 2. **指定运行端口** 若应用需要特定端口(如Web服务),添加参数: ```bash nohup java -jar your_application.jar --server.port=8080 > output.log 2>&1 & ``` #### 步骤4:设置开机启动 1. **创建Systemd服务文件** 新建服务文件 `/etc/systemd/system/your-app.service`,内容如下: ```ini [Unit] Description=Your Java Application After=network.target [Service] ExecStart=/usr/bin/java -jar /path/to/your_application.jar WorkingDirectory=/path/to/ User=root Restart=always [Install] WantedBy=multi-user.target ``` 2. **启用并启动服务** ```bash sudo systemctl daemon-reload sudo systemctl enable your-app sudo systemctl start your-app ``` #### 常见问题排查 - **端口冲突**:使用 `netstat -tulnp | grep 8080` 检查端口占用 - **权限不足**:为JAR文件添加执行权限 `chmod +x your_application.jar` - **日志分析**:通过 `tail -f output.log` 实时查看日志 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值