OpenShift 503 自动重启Shell脚本优化版
“OpenShift是红帽公司推出的一个云计算服务平台,开发人员可以用它来构建和发布web应用。Openshift广泛支持多种编程语言和框架,如Java,Ruby和PHP等。另外它还提供了多种集成开发工具如Eclipse integration,JBoss Developer Studio和 Jenkins等。OpenShift 基于一个开源生态系统为移动应用,数据库服务等,提供支持。” ——百度百科
近来听说了OpenShift,于是试用了下,还不错,功能齐全,速度也还可以,美中不足的是有时维护后再访问会坑爹的503,应用状态变成Idle或Unkonw等等,必须手动执行重启才恢复,让人很不爽。
OpenShift提供了两种方式:进入Web后台/SSH命令行。但是无论哪种都不很方便,这等蛋疼事还是交给电脑自动来做比较好。
想到这种事遇到的人不算少,不知道有没有做过类似东西的人,于是上百度搜索,找到一篇关于此问题的文章,《Openshift 503自动重启应用》,呵呵,可以偷懒了,文章是通过使用一个bash脚本,配合OpenShift的Cron来实现这一功能.
简单分析下,可以看出是调用curl获取指定网页的状态码,如果返回是200或302则判定为正常,否则执行自动重启。
我在试用之后有些我发现了一些不足:
1.因时区设定问题(OpenShift默认是EST时间,即美国东部时间),写出的日志时间不是北京时间,查看日志还得自己换算时间,极为不爽。
2.网站返回301也会执行重启代码(有时候因为特殊原因例如域名跳转或者维护需要设定首页301跳转,造成不便)。
3.配置稍麻烦,需手动填写sshid变量值和域名,虽然没什么大问题,但是我比较喜欢追求完美。
第一个问题十分好解决,使用linux下的export命令更改时区设定即可解决,由于export仅在本次执行有效,所以必须每次执行脚本都加上这句“export TZ='Asia/Shanghai'”;
第二个问题需要更改一下grep命令的参数,加入301判定即可。
第三个问题使用OpenShift独有的环境变量即可,域名为OPENSHIFT_APP_DNS,数据目录为OPENSHIFT_DATA_DIR,其他还有一些环境变量可以在SSH SHELL下执行export查看。
最后,成品代码如下:
1 #!/bin/bash 2 export TZ='Asia/Shanghai' 3 curl -I ${OPENSHIFT_APP_DNS} 2> /dev/null | head -1 | grep -q '200\|301\|302' 4 s=$? 5 if [ $s != 0 ]; 6 then 7 echo "`date +"%Y-%m-%d %H:%M:%S"` down" >> ${OPENSHIFT_DATA_DIR}web_error.log 8 let t=`date +"%M"`%5 9 if [ $t -eq 0 ]; 10 then 11 echo "`date +"%Y-%m-%d %H:%M:%S"` restarting..." >> ${OPENSHIFT_DATA_DIR}web_error.log 12 /usr/bin/gear stop 2>&1 /dev/null 13 /usr/bin/gear start 2>&1 /dev/null 14 echo "`date +"%Y-%m-%d %H:%M:%S"` restarted!!!" >> ${OPENSHIFT_DATA_DIR}web_error.log 15 fi 16 else 17 echo "`date +"%Y-%m-%d %H:%M:%S"` is ok" > ${OPENSHIFT_DATA_DIR}web_run.log 18 fi
使用方法:保存此脚本在 app-root/repo/.openshift/cron/minutely 并赋予711执行权限。
(文中引用原脚本来自 《Openshift 503自动重启应用》文章作者:wgwxf)
(转载请注明出处 http://www.cnblogs.com/felixgeory/p/Skill-OpenShift-AutoRestartOptimizationScript.html )