提醒:本文最后更新于 2809 天前,文中所描述的信息可能已发生改变,请仔细核实。
作为经费不足的站长。。。一台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》
收了 说不定会用得上
@World:
php5-fpm和php-fpm有什么区别么,我怎么感觉我问过这问题。
我还有pptpd、shadowsocks也可以这样写吧
@小怪物: php5-fpm被php-fpm包含,这样应该明白吧?
pptpd,d是daemon,可以简单理解是后台进程。shadowsocks可以简写为ss。
@小怪物: 其实会出现php5-fpm这样的名称,说明你是用apt-get、或yum等来安装程序的。只是个命名方式不同。
@kn007: 我的意思是我说的这两货也可以用你上面的代码套咯。
@小怪物: 略微改下名可以用,如果用php5-fpm就改成php5-fpm。。还有pid位置要对。。。pid位置也是要对才行的
@kn007: 看了下都在var/run
@小怪物: 那就没问题。就看服务名对不对就好了。
php-fpm或php5-fpm都是服务名。
@kn007: 嗯,我的是php5-fpm,
可以去操作了
看得头大,呵呵。
@郑永: 额
我觉得 start 都换成 restart 会好点~
@浅念: 其实我自己用的就是restart...但我觉得start对一般人足够了
我们没有用Varnish,不管是前端还是后端都是nginx,其余是phpfpm+memcached
本来是要做nfs+fpm的,可惜nfs稳定性实在太差了~另外有的难以重启的设备例如硬件防薇墙怎么Keepalive
@敏: nginx其实足够了,配合fastcgi很好,比varnish快,我用varnish主要原因是控制header和替死鬼(可以看新一篇说到),而且cache在内存里。
nfs?没用过。
硬件防火墙没用过,有也是主机商帮忙。
防薇墙。。。薇到底做了什么事情。。。。求薇真相!
@kn007: 流量清洗等大多数的东西都被硬件防薇墙解决了,剩下的主要是靠前端的nginx,nfs的目的是把fpm分散到不同的机器上解决,至于对硬件的Keepalive,我只能写接口操作iLO和iDRAC了,但是我们用的防薇墙没有这样的接口...
@敏: 高大上啊。没接口确实不方便。可以模拟操作么?
@kn007: 模拟操作的前提是你有自己的机柜,或者至少有PDU的控制权限
@敏: 那你平时操作怎么办?联系机房?
@kn007: 那玩意不死的话可以操作 死了就只能让那边重启了
@敏: 哦,好吧,那就有点坑了