是否可以将supervisord配置为在指定时间后重启程序?
假设我有一个CLI PHP脚本可能会挂起并停止响应。是否可以在2小时后重新启动此应用程序的所有实例?否则,应用程序运行时应该存在这种情况,但它处于挂起状态(即不做任何工作,并且不响应任何信号)。
答案 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