基础信息:
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 运行)
-
创建用户及用户组
使用useradd
创建不可登录的系统用户,提升安全性:sudo groupadd -r appadmin # 创建用户组 sudo useradd -r -s /bin/false -g appadmin appadmin # -r 表示系统用户,-s 禁用登录
-
设置目录权限
若服务涉及其他目录权限,可使用命令设置权限;
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 服务
-
创建服务文件
在/etc/systemd/system
下新建文件smart-admin.service
:sudo nano /etc/systemd/system/smart-admin.service
-
编写服务配置
参考以下模板(注意使用时将注释删除):[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 # 多用户模式启用
三、服务管理操作
-
重载配置并启动服务
sudo systemctl daemon-reload # 加载新服务文件 sudo systemctl start smart-admin # 启动服务 sudo systemctl enable smart-admin # 设置开机自启
-
常用命令
# 查看实时状态 sudo systemctl status smart-admin # 重启服务(修改配置后使用) sudo systemctl restart smart-admin # 查看日志(实时跟踪) journalctl -u smart-admin -f # 按 Ctrl+C 退出
四、高级优化与调试
-
资源限制(可选)
在[Service]
部分添加以下参数,防止内存泄漏:MemoryLimit=2G # 限制最大内存 CPUQuota=80% # 限制 CPU 使用率
-
安全增强
-
禁止 JAR 文件被修改:
sudo chmod 500 /home/smart-admin-v3/sa-admin-prod-3.0.0.jar
-
-
错误排查
-
权限问题:检查
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
验证)
-
五、扩展场景
若需实现 异常自动重启+告警通知,可结合以下工具:
-
Monit:监控服务状态并触发邮件告警
-
Prometheus + Grafana:可视化监控 JVM 性能指标
通过上述步骤,您已实现基于 Systemd 的 JAR 服务全生命周期管理。此方案在 稳定性(自动重启)、安全性(专用用户)和 可维护性(集中日志)上均有显著优势