Nginx 当HHVM停止响应但进程未停止时自动重新启动

Nginx 当HHVM停止响应但进程未停止时自动重新启动,nginx,monitoring,daemon,hhvm,Nginx,Monitoring,Daemon,Hhvm,我遇到了一个问题,每12-24小时,HHVM就会崩溃,但它似乎会让进程继续运行。似乎大多数提供商只是使用php5 fpm作为nginx内的故障切换,以提高稳定性。但是,这不会重新启动无响应的hhvm实例 由于进程一直在运行,大多数服务器监视解决方案将其视为一个活动守护进程,而不是重新启动它。HTTP监视的反应可能很慢 是否可以在故障转移时触发hhvm重启?如果没有,那么什么是确保重新启动无响应的侦听守护程序的最佳解决方案。在官方bug上发布了关于此主题的解决方案。 这是他告诉添加到cron的脚本

我遇到了一个问题,每12-24小时,HHVM就会崩溃,但它似乎会让进程继续运行。似乎大多数提供商只是使用php5 fpm作为nginx内的故障切换,以提高稳定性。但是,这不会重新启动无响应的hhvm实例

由于进程一直在运行,大多数服务器监视解决方案将其视为一个活动守护进程,而不是重新启动它。HTTP监视的反应可能很慢

是否可以在故障转移时触发hhvm重启?如果没有,那么什么是确保重新启动无响应的侦听守护程序的最佳解决方案。

在官方bug上发布了关于此主题的解决方案。 这是他告诉添加到cron的脚本,每2分钟执行一次

我对它做了一些修改,使它能够与HHVM的预构建包一起工作

#! /bin/bash
PID="`cat /var/run/hhvm/pid`"

if [ "$PID" == "" ]; then
    echo No PID, starting up
    /etc/init.d/hhvm start
else
    if [ "`ps ax -o pid | grep $PID`" == "" ]; then
        echo HHVM PID $PID not running, starting up
        # Stop, just in case, if crashed. Else you would get:
        #  * WARNING: hhvm.83 has already been started
        /etc/init.d/hhvm stop
        /etc/init.d/hhvm start
    fi
fi

关于您对另一个答案的评论,当您有一个返回到php的方法,并且您希望确保HHVM是响应的方法时,一个好的选择是使用来自的解决方案并进行一次更改,在您的状态脚本中检查:

if (defined('HHVM_VERSION')) {
  echo 'status';
}

这两种解决方案的结合将处理hhvm所有可能的崩溃方式。

我相信这是一个简单的cron脚本,可以检查以确保hhvm进程仍在运行。不幸的是,这并不能解决检查一个仍在“侦听”的进程是否已变得无响应的问题。@etc,HHVM在变得无响应时崩溃:-)并不总是这样。事实上,这是一个相当有文献记载的问题。@etc,我在谈论我六个多月的经验。但是,如果您所说的确实发生了,那么从cron执行一个脚本,该脚本与hello world相呼应,然后比较输出。@等等,在您描述的情况下(我似乎也经历过),HHVM还在听吗?还是仅仅是超时?如果是前者,您可能可以调整此cron来执行类似于lsof-i TCP:9000的操作,而不是查找PID。