可以将upstart expect/respawn用于fork两次以上的进程吗?

joh*_*ler 17 linux rhel upstart

我正在使用upstart来启动/停止/自动重启守护进程.其中一个守护进程分叉4次.该新贵食谱指出,它仅支持分叉两次.有解决方法吗?

怎么会失败

如果我尝试使用expect daemon或者expect fork,upstart使用第二个分叉的pid.当我试图停止工作时,没有人响应新手SIGKILL信号,它会挂起,直到你耗尽pid空间并循环回来.如果添加respawn会变得更糟.Upstart认为这份工作已经死亡并立即开始另一项工作.

上游承认错误

已经为暴发户输入一个错误.提出的解决方案坚持使用旧的sysvinit,重写您的守护进程,或等待重写.RHEL比最新的upstart软件包差不多2年,所以当重写发布时我们得到更新,等待可能会是4年.守护程序由承包商的分包商的分包商编写,因此不会很快修复.

joh*_*ler 20

我想出了一个丑陋的黑客来完成这项工作.它适用于我的系统上的应用程序.因人而异.

  1. 在预启动部分启动应用程序
  2. 在脚本部分运行一个只要应用程序运行就运行的脚本.这个剧本的pid是暴发户将追踪的内容.
  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
Run Code Online (Sandbox Code Playgroud)

使用pid文件可以采用类似的方法.

  • 非常聪明! (4认同)