kn007的个人博客
♥ You are here: Home > 软件与网络 > VPS > 再说博客服务器的KeepAlive

再说博客服务器的KeepAlive

by | 22 Comments

提醒:本文最后更新于 2881 天前,文中所描述的信息可能已发生改变,请仔细核实。

6026338446893

作为经费不足的站长。。。一台VPS已经是我的极限了。欢迎赞助我,喵~

所以如果服务器挂了,肯定是没法KeepAlive的。

但如果服务器没挂,而是应用(可能是Varnish、Nginx、MySQL、PHP等)挂了,怎么办?

虽然如此,人生就是为了活的有点逼格。所以就简单利用cron job来循环检测。

主要目的就是,确保应用在线。流程如下:
1.确定应用是否创建了pid文件,如果没有,肯定没启动,启动应用。
2.如果创建pid文件,但通过pid找不到进程信息,说明应用可能已经崩溃,启动应用。
3.如果都正常,说明应用正常运行中,列出各自状态。

这是按照我的VPS的应用写的。实际大家按照需求,参考改动。

把代码放上来,供大家参考:

#!/bin/sh

###############

VARNISHPIDFILE=/var/run/varnish.pid
if [ ! -r $VARNISHPIDFILE ] ; then
        /etc/init.d/varnishd start
fi


NGINXPIDFILE=/var/run/nginx.pid
if [ ! -r $NGINXPIDFILE ] ; then
        /etc/init.d/nginx start
fi


MYSQLPIDFILE=/var/run/mysql.pid
if [ ! -r $MYSQLPIDFILE ] ; then
        /etc/init.d/mysql start
fi


PHPPIDFILE=/var/run/php-fpm.pid
if [ ! -r $PHPPIDFILE ] ; then
        /etc/init.d/php-fpm start
fi


MEMCACHEPIDFILE=/var/run/memcached.pid
if [ ! -r $MEMCACHEPIDFILE ] ; then
        /etc/init.d/memcached start
fi


REDISPIDFILE=/var/run/redis.pid
if [ ! -r $REDISPIDFILE ] ; then
        /etc/init.d/redisd start
fi

###############

VARNISHPID=`cat $VARNISHPIDFILE`
if ps -p $VARNISHPID | grep -q $VARNISHPID; then
        /etc/init.d/varnishd status
else
        /etc/init.d/varnishd start
fi


NGINXPID=`cat $NGINXPIDFILE`
if ps -p $NGINXPID | grep -q $NGINXPID; then
        /etc/init.d/nginx status
else
        /etc/init.d/nginx start
fi


MYSQLPID=`cat $MYSQLPIDFILE`
if ps -p $MYSQLPID | grep -q $MYSQLPID; then
        /etc/init.d/mysql status
else
        /etc/init.d/mysql start
fi


PHPPID=`cat $PHPPIDFILE`
if ps -p $PHPPID | grep -q $PHPPID; then
        /etc/init.d/php-fpm status
else
        /etc/init.d/php-fpm start
fi


MEMCACHEPID=`cat $MEMCACHEPIDFILE`
if ps -p $MEMCACHEPID | grep -q $MEMCACHEPID; then
        /etc/init.d/memcached status
else
        /etc/init.d/memcached start
fi


REDISPID=`cat $REDISPIDFILE`
if ps -p $REDISPID | grep -q $REDISPID; then
        /etc/init.d/redisd status
else
        /etc/init.d/redisd start
fi

将上述代码保存到任意文件即可,我是保存到/home/web_keepalived。

另简单介绍Crontab命令:

基本格式:
*  *  *  *  *  command 
分 时 日 月 周 命令 
第1列表示分钟1~59 每分钟用*或者 */1表示 
第2列表示小时1~23(0表示0点) 
第3列表示日期1~31 
第4列表示月份1~12 
第5列标识号星期0~6(0表示星期天) 
第6列要运行的命令

现在起,我们就可以通过:

crontab -e

输入:

*/1 * * * * /bin/sh /home/web_keepalived >/dev/null 2>&1

来自动执行(每分钟会执行一次脚本),以达到应用一直在线的目的。

 >/dev/null 2>&1

的目的是不输出信息,因为在cron下没必要输出。

更多crontab命令帮助,请自行搜索。

本篇文章结束,下篇文章更精彩,明天发布哦。

转载请注明转自:kn007的个人博客的《再说博客服务器的KeepAlive

donate
有所帮助?
Tags: , ,

Comments

22 Comments立即评论
  1. 收了 :roll: :razz: 说不定会用得上

    1. MOD回复
  2. php5-fpm和php-fpm有什么区别么,我怎么感觉我问过这问题。 :evil:
    我还有pptpd、shadowsocks也可以这样写吧

    1. MOD回复

      @小怪物: php5-fpm被php-fpm包含,这样应该明白吧?
      pptpd,d是daemon,可以简单理解是后台进程。shadowsocks可以简写为ss。

    2. MOD回复

      @小怪物: 其实会出现php5-fpm这样的名称,说明你是用apt-get、或yum等来安装程序的。只是个命名方式不同。

    3. @kn007: 我的意思是我说的这两货也可以用你上面的代码套咯。 :lol:

    4. MOD回复

      @小怪物: 略微改下名可以用,如果用php5-fpm就改成php5-fpm。。还有pid位置要对。。。pid位置也是要对才行的

    5. @kn007: 看了下都在var/run

    6. MOD回复

      @小怪物: 那就没问题。就看服务名对不对就好了。
      php-fpm或php5-fpm都是服务名。

    7. @kn007: 嗯,我的是php5-fpm,
      可以去操作了 :lol:

  3. 看得头大,呵呵。

    1. MOD回复

      @郑永: 额 :o

  4. 回复

    我觉得 start 都换成 restart 会好点~ :cool: :razz:

    1. MOD回复

      @浅念: 其实我自己用的就是restart...但我觉得start对一般人足够了

  5. LV1回复

    我们没有用Varnish,不管是前端还是后端都是nginx,其余是phpfpm+memcached
    本来是要做nfs+fpm的,可惜nfs稳定性实在太差了~另外有的难以重启的设备例如硬件防薇墙怎么Keepalive

    1. MOD回复

      @敏: nginx其实足够了,配合fastcgi很好,比varnish快,我用varnish主要原因是控制header和替死鬼(可以看新一篇说到),而且cache在内存里。
      nfs?没用过。
      硬件防火墙没用过,有也是主机商帮忙。
      防薇墙。。。薇到底做了什么事情。。。。求薇真相!

    2. LV1回复

      @kn007: 流量清洗等大多数的东西都被硬件防薇墙解决了,剩下的主要是靠前端的nginx,nfs的目的是把fpm分散到不同的机器上解决,至于对硬件的Keepalive,我只能写接口操作iLO和iDRAC了,但是我们用的防薇墙没有这样的接口...

    3. MOD回复

      @敏: 高大上啊。没接口确实不方便。可以模拟操作么?

    4. LV1回复

      @kn007: 模拟操作的前提是你有自己的机柜,或者至少有PDU的控制权限

    5. MOD回复

      @敏: 那你平时操作怎么办?联系机房?

    6. LV1回复

      @kn007: 那玩意不死的话可以操作 死了就只能让那边重启了

    7. MOD回复

      @敏: 哦,好吧,那就有点坑了

icon_wink.gificon_neutral.gificon_mad.gificon_twisted.gificon_smile.gificon_eek.gificon_sad.gificon_rolleyes.gificon_razz.gificon_redface.gificon_surprised.gificon_mrgreen.gificon_lol.gificon_idea.gificon_biggrin.gificon_evil.gificon_cry.gificon_cool.gificon_arrow.gificon_confused.gificon_question.gificon_exclaim.gif