gpt4 book ai didi

centos - systemd 不执行 ExecStop 脚本

转载 作者:行者123 更新时间:2023-12-04 19:41:19 32 4
gpt4 key购买 nike

我使用 systemd 创建了一个服务(名称-开发)。以下是我的开发单元文件的内容 -

Description=Develop Manager Service
[Service]
Type=forking
PIDFile = /home/nayasa/data/var/run/developPid
User=root
Group=root
ExecStartPre = /bin/bash /home/nayasa/control_scripts/develop_startPre.sh
ExecStart =/bin/bash /home/nayasa/control_scripts/develop_start.sh
ExecStop =/bin/bash /home/nayasa/control_scripts/develop_stop.sh
[Install]
WantedBy=multi-user.target

我的 develop.service 在运行时 fork 了多个进程。
每当我运行 systemctl stop develop.service ,systemd 停止我的开发服务的 CGroup 中的所有进程,而 开发停止我提供的脚本仅使用 pidfile 中的 pid 杀死主进程。我只想停止主进程。在我看来,systemd 没有使用我的停止脚本。如何强制 systemd 执行我的停止脚本以停止服务而不杀死 Cgroup 的所有进程?仅供引用-我知道使用 KillMode 选项我可以指示 systemd 仅杀死主进程并保留其他进程,但我想知道为什么我的脚本没有被执行?

最佳答案

在停止服务后期望孤立进程持续存在有点奇怪。您将留下一个处于未知状态的系统。如果您再次启动该服务会发生什么?

我认为您可能想要的比单一服务更复杂。

假设您想要 develop.service发射proc1proc2 .你想要systemctl stop develop.service杀死proc1但不是 proc2 .在这种情况下,您仍然需要管理 proc2否则,您将拥有一个流氓孤立的不受管理和受监控的进程。答案是使用其他服务。

相反,请尝试制作两项服务。 develop.service将启动 proc1 ,可能使用您的脚本。然后添加 Wants=proc2.service给您的[Unit]部分。 proc2.service将负责proc2 .

这意味着 systemctl start develop.service将推出proc1proc2 .同时systemctl stop develop.service只会杀死proc1 . proc2仍然可以通过检查 proc2.service 停止/监控.

关于centos - systemd 不执行 ExecStop 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61100730/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com