“OpenShift是红帽公司推出的一个云计算服务平台,开发人员可以用它来构建和发布web应用。Openshift广泛支持多种编程语言和框架,如Java,Ruby和PHP等。另外它还提供了多种集成开发工具如Eclipse integration,JBoss Developer Studio和 Jenkins等。OpenShift 基于一个开源生态系统为移动应用,数据库服务等,提供支持。”  ——百度百科

OpenShift虽然访问速度对于国内来说略有不足,但其作为一个免费空间,其功能相当强大,想了解的可以自行百度,这里要说的便是其503错误问题:有时维护后会坑爹的503错误码,同时ap status变成Idle或Unkonw等等,必须手动restart app才恢复。而restart app可以通过以下方式: 1.Web面板 2.SSH Consle 3.Openshift Client tools

重启一次可能你觉得并不麻烦,但经常如此,就真的很烦了,恢复不及时还可能会导致网站用户的流失。

前文说过Openshift是支持SSH Consle的,并且可以通过linux命令行控制app。Openshift应用有个组件为cron,其与http服务是独立的,可以定时执行脚本。于是,我们便可以通过建立一个cron任务自动执行我们预先设定好的bash脚本来检测网站并执行重启操作。 因为OpenShift默认是EST时区(美国东部时间所以输出时间并不是北京时间,首先执行export TZ='Asia/Shanghai' 更改date命令的时区。

我们可以通过linux系统下自带的curl命令抓取网页,curl命令的详细用法可以在网上查到,为避免冗长不再赘述。

那么,如何判断网页是否正常呢,我们知道,当HTTP STATUS CODE为200时,便代表整个HTTP请求成功完成了,那么我们只需通过grep命令判断其是否为正常状态的返回码即可。

最后,不正常时执行重启操作并输出日志即可,至此,整个Bash脚本编写完毕。成品代码如下:

#!/bin/bash
export TZ='Asia/Shanghai'
curl -I ${OPENSHIFT_APP_DNS} 2> /dev/null | head -1 | grep -q '200\|301\|302'
s=$?
if [ $s != 0 ];
    then
        echo "`date +"%Y-%m-%d %H:%M:%S"` down" >> ${OPENSHIFT_DATA_DIR}/web_error.log
        let t=`date +"%M"`%5
        if [ $t -eq 0 ];
            then
                echo "`date +"%Y-%m-%d %H:%M:%S"` restarting..." >> ${OPENSHIFT_DATA_DIR}/web_error.log
                /usr/bin/gear stop 2>&1 /dev/null
                /usr/bin/gear start 2>&1 /dev/null
                echo "`date +"%Y-%m-%d %H:%M:%S"` restarted!!!" >> ${OPENSHIFT_DATA_DIR}/web_error.log
        fi
else
    echo "`date +"%Y-%m-%d %H:%M:%S"` is ok" > ${OPENSHIFT_DATA_DIR}/web_run.log
fi

使用方法:保存此脚本在 app-root/repo/.openshift/cron/minutely 并赋予执行权限(755或777)。