一句话结论—— 开机是否启动只取决于 `multi-user.target.wants/spring_<项目名>.service` 这条链接的有无,没有任何配置字段能决定它。
就是找到目录:/etc/systemd/system/multi-user.target.wants/
然后搜索以 spring_ 开头的文件
然后查不想开机启动服务的项目,删除它。就可以。
在这目录下的项目,都是开机后自动启动JAVA项目的。

以下位置是保存所有JAVA项目的配置文件:
/usr/lib/systemd/system/
然后搜索以 spring_ 开头的文件

【完】
对于JAVA网站已经删除后的遗留配置进行删除干净的方法:
分3步:先只读干跑看清单,再删。
① 干跑(只读,先贴结果核对)
cd /www/server/panel/data/db
keep=$(sqlite3 site.db "select name from sites where project_type='Java';")
for f in /usr/lib/systemd/system/spring_*.service; do
u=$(basename "$f" .service); n=${u#spring_}
wd=$(awk -F= '/^WorkingDirectory/{print $2}' "$f")
if echo "$keep" | grep -qxF "$n"; then echo "KEEP $u"; else echo "DELETE $u [dir: $([ -d "$wd" ] && echo 存在 || echo 已无)]"; fi
done
KEEP = 面板里还在的项目,动不得;DELETE = 面板库里已无记录的单元。方括号里是它指向的项目目录是否还存在,删前扫一眼更放心。
② 正式删除(含单元文件、开机链接、残留状态)
cd /www/server/panel/data/db
keep=$(sqlite3 site.db "select name from sites where project_type='Java';")
for f in /usr/lib/systemd/system/spring_*.service; do
u=$(basename "$f" .service); n=${u#spring_}
echo "$keep" | grep -qxF "$n" && continue
systemctl disable --now "$u.service" 2>/dev/null
rm -f "$f"
echo "removed: $u"
done
systemctl daemon-reload
systemctl reset-failed 2>/dev/null
echo "--- 剩余单元:"
systemctl list-unit-files --type=service | grep spring
echo "--- 剩余开机链接:"
ls -l /etc/systemd/system/multi-user.target.wants/ | grep spring
③ 收尾(可选,清残留脚本 /pid/env/ 日志)
只对上一步 `removed:` 打印出的名字执行,别整目录删:
for n in <上一步打印的项目名,空格分隔>; do
rm -f /var/tmp/springboot/vhost/scripts/$n.sh \
/var/tmp/springboot/vhost/pids/$n.pid \
/var/tmp/springboot/vhost/env/$n.env
echo "cleaned: $n"
done
日志 /www/wwwlogs/java/springboot/<名>.log 建议留着(有排查价值),要清再单独删。
红线:
不删 /www/wwwroot/java/... 下的项目目录(宝塔删项目本就不删文件,里面可能有你的数据)。
不删任何 KEEP 的单元。删除后跑一次 ls /usr/lib/systemd/system/spring_*.service 和 systemctl list-unit-files | grep spring ,两份清单必须一致。