gpt4 book ai didi

linux - upstart expect/respawn 可以用在 fork 两次以上的进程上吗?

转载 作者:IT王子 更新时间:2023-10-29 00:22:02 30 4
gpt4 key购买 nike

我正在使用 upstart 来启动/停止/自动重启守护进程。其中一个守护进程 fork 4 次。 upstart cookbook声明它只支持两次 fork 。有解决方法吗?

它是如何失败的

如果我尝试使用 expect daemonexpect fork,upstart 会使用第二个 fork 的 pid。当我试图停止工作时,没有人响应 upstarts SIGKILL 信号并且它挂起,直到你耗尽 pid 空间并循环回来。如果您添加重生,情况会变得更糟。 Upstart 认为这份工作已经结束,并立即开始另一份工作。

上游确认错误

A bug has been entered对于 Upstart 。提供的解决方案坚持使用旧的 sysvinit,重写你的守护进程,或者等待重写。 RHEL 比最新的 upstart 软件包晚了将近 2 年,所以当重写发布并且我们得到更新时,等待时间可能是 4 年。该守护程序由承包商的分包商的分包商编写,因此也不会很快修复。

最佳答案

我想出了一个丑陋的 hack 来完成这项工作。它适用于我系统上的应用程序。 YMMV.

  1. 在预启动部分启动应用
  2. 在脚本部分运行一个脚本,该脚本会在应用程序运行时运行。该脚本的 pid 是 upstart 将跟踪的内容。
  3. 在停止后部分终止应用程序

例子

env DAEMON=/usr/bin/forky-application

pre-start script
su -s /bin/sh -c "$DAEMON" joeuseraccount
end script

script
sleepWhileAppIsUp(){
while pidof $1 >/dev/null; do
sleep 1
done
}

sleepWhileAppIsUp $DAEMON
end script

post-stop script
if pidof $DAEMON;
then
kill `pidof $DAEMON`
#pkill $DAEMON # post-stop process (19300) terminated with status 1
fi
end script

可以对 pid 文件采取类似的方法。

关于linux - upstart expect/respawn 可以用在 fork 两次以上的进程上吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12200217/

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