Administrator
Administrator
Published on 2025-03-24 / 187 Visits
0
0

Java-Jar包在Linux开机自启动

前言

无论在生产环境还是开发环境,当有多个项目的时候,不能开机自动启动是一个很崩溃的事情,鬼知道某个项目的服务器什么时候因为什么人会突然重启、断电、崩溃;

最终导致的结果就是本来一个周末、假期被临时电话通知启动程序;

并不是不找事的时候就没有事,所以无论任何时候,不想让事情找上门,任何事情上都解决完美不留尾巴;

开机自启动的方法有很多

​优先选择【systemctl】方法:功能完善且支持服务监控、重启策略等高级特性

一、创建服务文件

/etc/systemd/system/目录下新建.service文件,例如:

sudo vi /etc/systemd/system/myapp.service

内容参考以下模板:

【修改】ExecStart为自己的应用启动命令;Description为自己的应用描述;

[Unit]
Description=My Java Application
After=network.target

[Service]
User=root
Type=simple
ExecStart=/usr/bin/java -jar /path/to/your-app.jar
Restart=on-failure
RestartSec=10s
TimeoutStartSec=0
KillMode=process

[Install]
WantedBy=multi-user.target

编辑好后,:wq保存退出。

【字段解释】

[Unit]

Description=My Java Application # 服务描述 需改成自己的描述

After=network.target # 依赖网络服务

[Service]

User=root # 运行用户

Type=simple # 进程类型(后台服务用forking)默认为simple通过主进程启动

ExecStart=/usr/bin/java -jar /path/to/your-app.jar # 启动命令 修改为自己jar包的路径和按需调整启动命令

Restart=on-failure # 失败时自动重启

RestartSec=10s # 重启间隔

TimeoutStartSec=0 # 禁用启动超时 等待应用的启动时间,单位为秒,0表示禁用

KillMode=process # systemctl stop 会发送终止信号,允许 Java 应用优雅关闭(如 Spring Boot 处理 SIGTERM)

[Install]

WantedBy=multi-user.target # 多用户模式启动

二、加载并启用服务

sudo systemctl daemon-reload           # 重新加载配置

sudo systemctl enable myapp    # 设置开机自启

sudo systemctl start myapp             # 立即启动服务

三、​验证服务状态

systemctl status myapp      # 查看服务状态
journalctl -u myapp -f     # 查看实时日志

四、systemctl 常用命令

1、服务生命周期管理

启动服务:

systemctl start <服务名>          # 例:启动 Nginx → systemctl start nginx

停止服务:

systemctl stop <服务名>           # 例:停止 Apache → systemctl stop apache2

​重启服务:

systemctl restart <服务名>        # 例:重启 MySQL → systemctl restart mysql

​重载配置(不中断服务)​:

systemctl reload <服务名>        # 例:重载 SSH → systemctl reload sshd

2、服务状态查看

​查看实时状态:

systemctl status <服务名>        # 显示运行状态、日志片段及依赖关系

检查是否正在运行:

systemctl is-active <服务名>     # 返回 "active" 表示运行中

​检查是否开机自启:

systemctl is-enabled <服务名>    # 返回 "enabled" 表示已设置自启

​检查是否启动失败:

systemctl is-failed <服务名>     # 返回 "failed" 表示服务异常

​3、服务自启管理

​启用开机自启:

systemctl enable <服务名>        # 例:启用 Docker → systemctl enable docker

​禁用开机自启:

systemctl disable <服务名>       # 例:禁用防火墙 → systemctl disable firewalld

4、日志与单元管理

查看服务日志:

journalctl -u <服务名>          # 例:查看 Apache 日志 → journalctl -u apache2

​列出所有已加载服务单元:

systemctl list-units --type=service

​列出所有开机自启服务:

systemctl list-unit-files --state=enabled

5、系统级操作

​重启系统:

systemctl reboot

​关机:

systemctl poweroff

​挂起(睡眠)​:

systemctl suspend

​休眠(保存到磁盘)​:

systemctl hibernate

6、高级用法

管理用户级服务:

systemctl --user start <服务名>  # 以当前用户身份运行服务(需配置用户级单元)

​远程管理服务:

systemctl -H user@host <命令>   # 例:远程重启服务 → systemctl -H user@192.168.1.10 restart nginx

​查看服务依赖关系:

systemctl list-dependencies <服务名>  # 正向依赖
systemctl list-dependencies --reverse <服务名>  # 反向依赖


Comment