如何在一段时间后重启supervisord程序?

时间:2013-12-26 13:51:19

标签: php supervisord supervisor

是否可以将supervisord配置为在指定时间后重启程序?

假设我有一个CLI PHP脚本可能会挂起并停止响应。是否可以在2小时后重新启动此应用程序的所有实例?否则,应用程序运行时应该存在这种情况,但它处于挂起状态(即不做任何工作,并且不响应任何信号)。

1 个答案:

答案 0 :(得分:2)

这是一个非常粗略的边缘解决方案(也许有人可以整理它),但由于supervisord有supervisorctl你可以运行它来重新启动X小时后的所有作业(作为supervisord服务器上的cronjob)

例如:


#!/bin/bash
excludedprocesses=(somejob someotherjob)

for f in `supervisorctl status | awk '{print $1}' `;  do  
        echo "found $f"

        if [[ ${excludedprocesses[*]} =~ $f ]]
        then
                echo "Exluding $f as a restart candidate"
        else
                status=`supervisorctl status $f | awk '{print $2}'`

                if [ "$status" == "RUNNING" ] ; then
                        echo "$f is running"

                        uptimedays=`supervisorctl status $f | grep day`
                        timepart=`supervisorctl status $f | awk '{print $NF}' | awk -F ":" '{print $1}'`
                        if [[ -n $uptimedays ]] |[[ $timepart -gt 1 ]] ;
                        then
                                echo "Restarting $f due to uptime"
                                `supervisorctl restart $f`
                        fi  

                fi  
        fi  
        echo ""
done