You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下自动部署Jar触发systemd服务start-limit-hit错误求助

问题解决方案

1. 修正目标服务的启动限制配置

报错是demo.service触发了启动次数限制,但你把StartLimit相关配置放在了监控重启服务里,这完全不对。把这两个参数移到demo.service的[Service]段:

[Unit]
Description=DEMOOOOOO Spring Boot application service
After=network.target

[Service]
#User=ubuntu
Type=simple
ExecStart=java -jar /root/artifacts2/demo-0.0.1-SNAPSHOT.jar

TimeoutStopSec=10
Restart=on-failure
RestartSec=5
# 取消启动次数限制,适配频繁重启场景
StartLimitIntervalSec=0
StartLimitBurst=0

[Install]
WantedBy=multi-user.target

2. 减少Path监控的触发频率

你当前监控整个目录,部署Jar时的临时文件写入、Jar替换的中间步骤会多次触发PathModified,导致服务反复启停。改成监控具体Jar文件,并使用PathChanged(仅当文件被替换、inode变化时触发,而非内容写入过程):

[Path]
Unit=demo-watcher.service
# 只监控目标Jar文件,且仅在文件被替换时触发
PathChanged=/root/artifacts2/demo-0.0.1-SNAPSHOT.jar

[Install]
WantedBy=multi-user.target

3. 优化重启服务的执行逻辑

当前先stop再start的方式可能出现时序问题,直接用systemctl restart更稳妥,它会自动等待停止完成后再启动:

[Unit]
Description=demo restarter
After=network.target

[Service]
Type=oneshot
# 用restart替代分开的stop+start,避免时序冲突
ExecStart=systemctl restart demo.service
StartLimitIntervalSec=0
StartLimitBurst=0

[Install]
WantedBy=multi-user.target

4. 部署脚本的原子化优化

如果Bitbucket部署是先上传临时文件再替换Jar,改成原子替换操作,减少文件变更事件:

# 示例部署脚本
# 先上传到临时目录
scp ./demo-0.0.1-SNAPSHOT.jar root@your-droplet:/tmp/
# 一次性替换目标Jar,仅触发一次监控事件
ssh root@your-droplet "mv /tmp/demo-0.0.1-SNAPSHOT.jar /root/artifacts2/"

内容的提问来源于stack exchange,提问作者abidinberkay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 03:35:23