基础信息:
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 服务全生命周期管理。此方案在稳定性(自动重启)、安全性(专用用户)和可维护性(集中日志)上均有显著优势。
评论