基础信息:

jar目录:/home/smart-admin-v3/sa-admin-prod-3.0.0.jar

Java服日志目录:/home/logs/smart_admin_v3/sa-admin/prod

以下是基于 Systemd 服务管理的完整部署流程,针对 JAR 应用 /home/smart-admin-v3/sa-admin-prod-3.0.0.jar 的配置与管理:


一、创建专用用户(避免使用 root 运行)

1.创建用户及用户组

使用 useradd 创建不可登录的系统用户,提升安全性:

sudo groupadd -r appadmin  # 创建用户组
sudo useradd -r -s /bin/false -g appadmin appadmin  # -r 表示系统用户,-s 禁用登录

2.设置目录权限若服务涉及其他目录权限,可使用命令设置权限;

sudo chown -R appadmin:appadmin **path**

本案例设置权限命令如下:

#将 JAR 文件所在目录的所有权赋予该用户:
sudo chown -R appadmin:appadmin /home/smart-admin-v3
# 将目录所有权赋予 appadmin 用户
sudo chown -R appadmin:appadmin /home/logs/smart_admin_v3
# 设置目录权限为 755(允许用户读写执行,组和其他用户只读)
sudo chmod -R 755 /home/logs/smart_admin_v3

二、配置 Systemd 服务

1. 创建服务文件

在 /etc/systemd/system下新建文件 smart-admin.service

 sudo nano /etc/systemd/system/smart-admin.service

2.编写服务配置

参考以下模板(注意使用时将注释删除):

[Unit]
Description=Smart Admin Backend Service
After=network.target  # 确保网络就绪后启动
[Service]
Type=simple
User=appadmin  # 指定运行用户
Group=appadmin
WorkingDirectory=/home/smart-admin-v3  # 设置工作目录
ExecStart=/usr/bin/java -Xms512m -Xmx1024m -jar sa-admin-prod-3.0.0.jar  # 启动命令(含JVM参数)
Restart=on-failure  # 异常退出时自动重启
RestartSec=10s  # 重启间隔时间
SuccessExitStatus=143  # 允许优雅退出
[Install]
WantedBy=multi-user.target  # 多用户模式启用

三、服务管理操作

1. 重载配置并启动服务

sudo systemctl daemon-reload  # 加载新服务文件
sudo systemctl start smart-admin  # 启动服务
sudo systemctl enable smart-admin  # 设置开机自启

2. 常用命令

# 查看实时状态
sudo systemctl status smart-admin
# 重启服务(修改配置后使用)
sudo systemctl restart smart-admin
# 查看日志(实时跟踪)
journalctl -u smart-admin -f  
# 按 Ctrl+C 退出

 四、高级优化与调试

1. 资源限制(可选)

在 [Service]`部分添加以下参数,防止内存泄漏:

MemoryLimit=2G  # 限制最大内存CPUQuota=80%    # 限制 CPU 使用率

2. 安全增强

 禁止 JAR 文件被修改:

sudo chmod 500 /home/smart-admin-v3/sa-admin-prod-3.0.0.jar

3.错误排查

 权限问题:检查 `appadmin` 用户是否有目录读写权限

      验证应用用户权限

# 确认目录归属和权限
ls -ld /home/logs/smart_admin_v3/sa-admin/prod
# 期望输出:
# drwxr-xr-x 2 appadmin appadmin 4096 Apr  3 09:10 /home/logs/.../prod
# 模拟 appadmin 用户写入测试文件
sudo -u appadmin touch /home/logs/smart_admin_v3/sa-admin/prod/test.txt
sudo -u appadmin rm /home/logs/smart_admin_v3/sa-admin/prod/test.txt

端口冲突:通过netstat -tulnp | grep java 查看端口占用

依赖缺失:确保 JDK 版本匹配(通过java -version验证)

五、扩展场景

若需实现异常自动重启+告警通知,可结合以下工具:

1. Monit:监控服务状态并触发邮件告警

2. Prometheus + Grafana:可视化监控 JVM 性能指标

通过上述步骤,您已实现基于 Systemd 的 JAR 服务全生命周期管理。此方案在稳定性(自动重启)、安全性(专用用户)和可维护性(集中日志)上均有显著优势。