---
description: Java jar / Go / 二进制用 systemd 部署（releases + 软链原子切换，systemctl restart）
applicable: [java, go, binary, backend]
requires: [systemctl]
buildSource: artifact
variables:
  - key: deployRoot
    label: 部署根目录
    default: "/opt/{{project}}"
    required: true
  - key: serviceName
    label: systemd 服务名
    required: true
  - key: healthPort
    label: 健康检查端口
    default: "8080"
    required: false
---

# systemd 二进制 / jar

本地构建产物（如 `app.jar` / 可执行文件）打包上传，releases 软链切换后 `systemctl restart`。

> systemd unit 的 ExecStart 应指向 `{{deployRoot}}/current/<你的产物>`（一次性配置）。
> 含 sudo 的 restart 会被 ai-policy 强制走审批 —— 建议给该服务配精确 sudoers 白名单，或让运行用户有权限管理该 unit。

```bash stage:release on:target
systemctl restart {{serviceName}}
```

```bash stage:health on:target
# 等服务起来：检查 systemd active + 端口在监听
systemctl is-active {{serviceName}} && (ss -ltn 2>/dev/null | grep -q ":{{healthPort}} " || netstat -ltn 2>/dev/null | grep -q ":{{healthPort}} ")
```
