Centos7中如何把一个jar包做成一个服务启动

本文介绍在阿里云CentOS7服务器上部署IDEA的Jrebel插件服务。此前在本地运行jar包有不便,而CentOS7的systemd可将jar包做成服务。说明了systemd系统和用户的区分,详细介绍了创建服务文件、启动服务的方法,还提及停止、重启服务及设置开机自启等命令。

使用IDEA做开发的都知道, IDEA的Jrebel插件可以支持热部署, 不用每次修改都重启服务器.之前都是把jar包做成bat文件, 在自己的电脑上设置成自启动项目,然后在IDEA里引用。奈何本人能力有限,每次开机启动的时候这个jar包都会在前台运行,需要手动最小化,看着很难受。正好买了一台阿里云服务器,就尝试在云服务器上部署。
最开始的时候,用 nohup java -jar xxx.jar > xxx.log 2>&1 & 的形式,让服务在后台运行,但是这种方式重启或者停止服务有些麻烦。CentOS7上的 systemd 提供了一组命令,可以把jar包做成一个服务,通过 systemctl start xxx 的形式启动,这样就方便多了。
首先需要说明的是: systemd 是有系统和用户区分的,系统的 systemd 在 /usr/lib/systemd/system 下,用户的在 /etc/systemd/system下,我们自己创建的service服务一般都存储在 /etc/systemd/system下。

  1. 创建服务文件
    vi /etc/systemd/system/xxx.service xxx为服务名。
    文件内容:
[Unit]
Description=jrebel service

[Service]
WorkingDirectory=/usr/local/dcy/javaAPP/
Type=simple
Restart=always
PrivateTmp=true
ExecStart=/usr/local/dcy/package/jdk1.8.0_152/bin/java -jar /usr/local/dcy/javaAPP/JrebelBrains.jar -p 8000
ExecStop=/bin/kill -15 $MAINPID

[Install]
WantedBy=multi-user.target

这样服务就创建好了。
2. 启动服务
我的service文件名为jrebel.service ,因此运行systemctl start jrebel.service或者systemctl start jrebel,查看服务运行状态systemctl status jrebel
服务成功启动
3. 其他命令
停止服务:systemctl stop jrebel
重启服务: systemctl restart jrebel
设置开机自启动:systemctl enable jrebel

jar部署开机自启,不同操作系统有不同的方法: ### Windows系统 - **使用.bat脚本**:在任一文件夹新建一个.bat脚本(如start.bat),用记事本打开,复制以下命令,将`xxx.jar`改jar的绝对路径: ```plaintext @echo off java -jar xxx.jar ``` 之后将该`start.bat`文件的快捷方式放到系统的开机启动文件夹中(路径一般为`C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup`) [^1]。 - **做成服务**:在本地创建一个空的文件夹,将jar,以及下载的两个文件(未提及的文件推测为与做成服务相关工具文件)放入其中,重命名为相同的名字,并新建一个`log`文件夹用于存放日志。编辑`sample-minimal.xml`文件: ```xml <service> <!-- 服务id在windows系统中必须唯一 --> <id>myapp</id> <!-- 服务显示名称 --> <name>MyApp Service (powered by WinSW)</name> <!-- Service description --> <description>This service is a service created from a minimal configuration</description> <!-- java环境变量 --> <env name="JAVA_HOME" value="%JAVA_HOME%" /> <executable>java</executable> <!-- jar位置, %BASE%:自动识别当前文件夹 --> <arguments>-jar %BASE%\test.jar</arguments> <!-- 开机自动启动模式:Automatic(默认) --> <!-- 手动启动: Manual --> <startmode>Automatic</startmode> <!-- 日志相关配置 --> <logpath>%BASE%\log</logpath> <logmode>rotate</logmode> </service> ``` 配置完后,利用相关工具(WinSW)将其安装为服务即可实现开机自启 [^3]。 ### Linux系统 #### CentOS系统 编写启动脚本`/etc/systemd/system/test.service`: ```plaintext [Unit] Description=lapis Requires=network.target remote-fs.target ##启动优先级,在下面的服务之后启动 After=kafka.service zookeeper.service nginx.service emqttd.service mysqld.service redisd.service [Service] Type=simple User=root Environment=HOME=/home/hdms ##启动路径 Environment=JAVA_HOME=/usr/bin WorkingDirectory=/home/hdms ##启动路径 ExecStart=/bin/sh -c '/usr/bin/java -Xms1024m -Xmx7168m -jar -Djava.awt.headless=true /home/hdms/HDMS.jar >/home/hdms/nohup.out 2>&1 ' ExecStop=/usr/bin/kill -9 Restart=on-failure [Install] WantedBy=multi-user.target ``` 之后执行`systemctl enable test.service`命令将其设置为开机自启 [^4]。 #### 通用Linux系统 以Spring Boot项目为例,创建一个启动脚本(如`start_my_app.sh`): ```bash #!/bin/bash java -jar /home/user/cf1014/springboot/0626.jar ``` 授予启动脚本执行权限: ```bash chmod +x start_my_app.sh ``` 将启动脚本添加到开机自启动项,使用命令将脚本添加到`rc.local`文件: ```bash sudo vim /etc/rc.local ``` 在文件中添加脚本的实际位置,如`/path/to/start_my_app.sh` [^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值