jar包服务开机自启

本文介绍如何通过创建.service文件配置Java应用为系统服务,并实现开机自启动。具体步骤包括:定位到正确目录、创建并编辑.service文件、赋予执行权限、启动服务、更新守护进程配置、停止服务及设置开机启动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、切换到该目录下cd /ets/systemd/system

 

2、在该目录下新建一个 后缀名为 .service 的文件

 

3、该文件下输入

[Unit]

Description=uum.service

After=syslog.target network.target

 

[Service]

Type=simple

 

ExecStart=/usr/java/jdk1.8.0_181/bin/java -jar /home/uum.jar &

#前面是java命令的绝对路径  后面是jar包的绝对路径

ExecStop=/bin/kill -15 $MAINPID

 

User=root

Group=root

 

[Install]

WantedBy=multi-user.target

 

4、给服务赋予可执行权限:chmod +x 服务名

 

5、启动服务 systemctl start 服务名

 

6、如果更改项目了,则先运行 systemctl daemon-reload

 

7、停止服务 systemctl stop 服务名,或者杀死进程

 

8、设置开机自启 systemctl enable 服务名

<think>我们需要在Linux系统中设置一个jar开机。通常,我们可以通过创建一个systemd服务来实现这个功能。systemd是大多数现代Linux发行版默认的初始化系统和服务管理器。 步骤: 1. 编写一个systemd服务单元文件(.service文件),定义服务动、停止、重等行为。 2. 将服务单元文件放在/etc/systemd/system/目录下。 3. 使用systemctl命令服务,使其在开机时自动动。 假设我们的jar路径为:/opt/myapp/myapp.jar 假设我们使用java命令来运行,并且需要指定一些JVM参数,比如内存设置等。 同时,假设我们使用一个非root用户(例如:appuser)来运行这个服务,以提高安全性。 下面是一个示例的systemd服务文件: 文件路径:/etc/systemd/system/myapp.service ```ini [Unit] Description=My Java Application After=syslog.target network.target [Service] User=appuser WorkingDirectory=/opt/myapp ExecStart=/usr/bin/java -Xms256m -Xmx512m -jar myapp.jar SuccessExitStatus=143 Restart=always RestartSec=30 [Install] WantedBy=multi-user.target ``` 解释: - [Unit]部分:Description是服务的描述,After定义了服务在哪些系统组件动之后动。 - [Service]部分: - User:指定运行服务的用户,这里我们假设使用appuser,你需要确保该用户存在,并且对jar和相关文件有适当的权限。 - WorkingDirectory:设置工作目录,这样jar中的相对路径(如果有)可以正确解析。 - ExecStart:服务的命令,这里我们使用java命令运行jar,并设置初始堆内存和最大堆内存。 - SuccessExitStatus:当Java程序被终止时(通常通过SIGTERM),它会返回143(128+15,15是SIGTERM的信号编号),这里告诉systemd这个退出状态是正常的。 - Restart:设置服务在退出后总是重。 - RestartSec:在重之前等待的时间(这里是30秒)。 - [Install]部分:WantedBy指定服务在哪个target下被用,multi-user.target表示多用户命令行模式。 创建好服务文件后,我们需要执行以下命令: 1. 重新加载systemd配置,使其识别新服务: ```bash sudo systemctl daemon-reload ``` 2. 服务,使其在开机动: ```bash sudo systemctl enable myapp.service ``` 3. 服务(无需重即可立即运行): ```bash sudo systemctl start myapp.service ``` 4. 检查服务状态: ```bash sudo systemctl status myapp.service ``` 5. 如果需要停止服务: ```bash sudo systemctl stop myapp.service ``` 6. 如果需要禁用开机: ```bash sudo systemctl disable myapp.service ``` 注意: - 确保java命令的路径正确,可以使用`which java`来查看路径。 - 如果jar需要外部配置文件,确保在WorkingDirectory目录中或者使用绝对路径指定配置文件。 - 如果应用需要绑定1024以下的端口(如80、443),则需要以root用户运行,或者使用setcap赋予权限,或者通过反向代理(如nginx)进行端口转发。 以上步骤适用于大多数Linux发行版,如Ubuntu、CentOS、Debian等。 如果您的系统使用的是SysVinit而不是systemd,那么步骤会有所不同,但现在大多数主流发行版都已使用systemd。 §§相关问题§§: 1. 如何在Linux中查看systemd服务的日志? 2. 如何设置服务在崩溃后自动重? 3. 如何为Java应用程序指定配置文件? 4. 如何以非root用户身份运行需要绑定80端口的服务?</think>### 在 Linux 中设置 Jar 开机 在 Linux 系统中实现 Jar 开机,推荐使用 `systemd` 服务管理器(适用于 Ubuntu 16.04+、CentOS 7+ 等主流发行版)。以下是完整实现方案: #### 步骤 1:创建 Systemd 服务文件 在 `/etc/systemd/system/` 目录下创建服务文件(需 root 权限): ```bash sudo nano /etc/systemd/system/myapp.service ``` 文件内容示例: ```ini [Unit] Description=My Java Application After=network.target # 确保网络就绪后动 [Service] User=appuser # 运行服务的用户(建议非root) WorkingDirectory=/opt/myapp # Jar所在目录 ExecStart=/usr/bin/java -Xms256m -Xmx512m -jar myapp.jar # 动命令 SuccessExitStatus=143 # 允许正常退出 Restart=on-failure # 失败时自动重 RestartSec=30 # 重间隔(秒) [Install] WantedBy=multi-user.target # 多用户模式用 ``` #### 步骤 2:设置权限和路径 ```bash # 创建应用目录并设置权限 sudo mkdir -p /opt/myapp sudo cp your-app.jar /opt/myapp/myapp.jar sudo chown -R appuser:appuser /opt/myapp # 检查Java路径(确保ExecStart中的路径正确) which java # 通常为 /usr/bin/java ``` #### 步骤 3:用并服务 ```bash # 重载systemd配置 sudo systemctl daemon-reload # 开机 sudo systemctl enable myapp.service # 立即服务 sudo systemctl start myapp.service # 检查状态 sudo systemctl status myapp.service ``` #### 关键配置说明: 1. **User**:建议使用非 root 用户(通过 `sudo useradd appuser` 创建) 2. **WorkingDirectory**:解决 Jar 内文件相对路径问题 3. **JVM 参数**: - `-Xms256m`:初始堆内存 - `-Xmx512m`:最大堆内存 - 添加 `-Dspring.config.location=/path/to/application.properties` 指定配置文件 4. **日志管理**: - 默认日志可通过 `journalctl -u myapp.service -b` 查看 - 如需文件日志,在 ExecStart 添加 `>> /var/log/myapp.log 2>&1` #### 管理命令: | 操作 | 命令 | |------|------| | 服务 | `sudo systemctl start myapp` | | 停止服务 | `sudo systemctl stop myapp` | | 查看日志 | `journalctl -u myapp.service -f` | | 禁用自 | `sudo systemctl disable myapp` | ### 备选方案:使用 rc.local(旧版系统) 对于不支持 systemd 的系统(如 Debian 7): ```bash sudo nano /etc/rc.local ``` 添加以下内容(在 `exit 0` 之前): ```bash su - appuser -c "cd /opt/myapp && nohup java -jar myapp.jar > /dev/null 2>&1 &" ``` 然后赋予执行权限: ```bash sudo chmod +x /etc/rc.local ``` ### 注意事项: 1. 使用 `nohup` 防止 SSH 断开导致进程终止 2. 生产环境建议添加 JVM 监控参数(如 `-XX:+HeapDumpOnOutOfMemoryError`) 3. 如需开机延时动,添加 `ExecStartPre=/bin/sleep 30`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值