相信很多使用Openshift的用户,时不时会遇到503的错误,可能是由于访问量稍大,或者程序占用资源过多,或者是OP又做了什么更新。
于是就会喜闻乐见的出现:
要是你在电脑上处理还挺方便的,相比以前来说,现在只要登录后台,点击Restart重启一下就可以了。
等等。。现在在中国哦。如果你在外头,手机收到来自某某监控的报警短信。突然想上来重启一下,这可不是什么容易的事。手机网络稳定也就算了,就怕被G#W卡在外头,等个半天,流量耗了,到没进去。
于是你就需要一个脚本,帮你来自动重启啦~
----------------------------------------------------------------------------------------------------
以下转自:http://www.cnblogs.com/felixgeory/p/Skill-OpenShift-AutoRestartOptimizationScript.html
近来听说了OpenShift,于是试用了下,还不错,功能齐全,速度也还可以,美中不足的是有时维护后再访问会坑爹的503,应用状态变成Idle或Unkonw等等(PS:YM表示有时候Start也会503.傲娇势不可挡~),必须手动执行重启才恢复,让人很不爽。
OpenShift提供了两种方式:进入Web后台/SSH命令行。但是无论哪种都不很方便,这等蛋疼事还是交给电脑自动来做比较好。
想到这种事遇到的人不算少,不知道有没有做过类似东西的人,于是上百度搜索,找到一篇关于此问题的文章,《Openshift 503自动重启应用》,呵呵,可以偷懒了,文章是通过使用一个bash脚本,配合OpenShift的Cron来实现这一功能.
(为了避免你们浏览太快,没看到正片,所以打上删除线,这个其实也可以用)
1 #!/bin/bash 2 #配置你的Openshift ssh用户名 3 sshid=你的Openshift ssh用户名 4 5 #脚本运行部分,替换为你自己的应用 6 curl -I movie.wgwxf.tk 2> /dev/null | head -1 | grep -q '200\|302' 7 8 s=$? 9 10 if [ $s != 0 ]; 11 then 12 echo "`date +"%Y-%m-%d %I:%M:%S"` down" >> /var/lib/openshift/$sshid/app-root/data/web_error.log 13 #分钟%10 取余 14 let t=`date +"%M"`%10 15 #每隔10分执行一次,防止连续多次重启,服务器压力太大 16 if [ $t -eq 0 ]; 17 then 18 #重启日志叠加记录>>,发现太大了可以删除,或者改成覆盖记录> 19 echo "`date +"%Y-%m-%d %I:%M:%S"` restarting..." >> /var/lib/openshift/$sshid/app-root/data/web_error.log 20 /usr/bin/gear stop 2>&1 /dev/null 21 /usr/bin/gear start 2>&1 /dev/null 22 echo "`date +"%Y-%m-%d %I:%M:%S"` restarted!!!" >> /var/lib/openshift/$sshid/app-root/data/web_error.log 23 fi 24 else 25 echo "`date +"%Y-%m-%d %I:%M:%S"` is ok" > /var/lib/openshift/$sshid/app-root/data/web_run.log 26 fi
作者给出的使用方法是:复制到 app-root/repo/.openshift/cron/minutely 目录下并赋予711执行权限。
简单分析下,可以看出是调用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自动重启脚本优化版.zip(百度云)
----------------------------------------------------------------------------------------------------
现在使用中,等到明天503挂了以后成功重启再编辑。
Comments | NOTHING