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

特定条件下阻止systemctl停止服务:ExecStop脚本无效问题咨询

解决systemd服务ExecStop返回错误码仍被强制终止的问题

问题原因

systemd默认行为是:无论ExecStop脚本返回什么退出码,都会向服务主进程发送终止信号(如SIGTERM),因此即使你的脚本返回错误码,服务仍会被强制杀死。

解决方案

1. 修正脚本语法错误

你的脚本存在语法问题,if语句缺少; then,会导致执行失败。修正后的脚本如下:

#!/usr/bin/env bash
# Version: 1.0.0

## RUN SCRIPT ##

# 获取活跃连接数
show_con

if [ "${connectionsCount}" -gt 0 ]; then
    exit 1
else
    stop_service
fi

2. 修改systemd服务配置

在[Service]段添加KillMode=none,禁止systemd主动终止主进程,完全由ExecStop脚本控制停止逻辑。修改后的配置:

[Service]
Type=simple
User=root
ExecStop=/bin/bash /opt/service.stop
KillMode=none

3. 生效配置

执行以下命令重新加载systemd配置并重启服务:

systemctl daemon-reload
systemctl restart your-service-name

效果说明

执行systemctl stop your-service-name时:

  • 若活跃连接数大于0,脚本返回1,systemd不会执行任何终止操作,服务继续运行;
  • 若活跃连接数为0,脚本执行stop_service函数停止服务,服务正常终止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:12:35