[转]OpenShift 503 自动重启Shell脚本优化版

发布于 2014-12-11  5.95k 次阅读


相信很多使用Openshift的用户,时不时会遇到503的错误,可能是由于访问量稍大,或者程序占用资源过多,或者是OP又做了什么更新。

于是就会喜闻乐见的出现:

 Openwhift-503-2014-12-11-23-55-36

Openwhift-503-2014-12-11-23-55-36

要是你在电脑上处理还挺方便的,相比以前来说,现在只要登录后台,点击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挂了以后成功重启再编辑。


眼里有远方,心中有阳光,脚下有力量