首页 > 代码库 > 一个网站的诞生09--自动监控
一个网站的诞生09--自动监控
部署Web App,需要买一个域名,我推荐http://www.namecheap.com/,用信用卡或者paypal付款,一年10刀。
如果需要VPS,买Linode.com的,它家新推出每月10刀的主机,性能绝佳,如果选择东京的机房,从大陆访问很快,用海外的主机不需要备案,这是最大的卖点。
网站的tornado代码运行了,网站可以访问了。有时候网站会因为各种原因崩溃,比如被攻击,代码bug,流量太大等等。
这时候就需要一个自动监控脚本。这个脚本监控网站的tornado进程,每隔几秒检测一次进程,如果发现进程不在了,就重新启动进程。有了它,你就不用半夜被叫醒重启网站了。
zuijiacanting.com的自动监控脚本类似这样,moniter_zjct.py
--------------------------------
#!/usr/bin/env python
#!-*- coding:utf-8 -*-
import os
import time
import sys
class MonitorZjct:
def run(self):
while True:
time.sleep(5)
try:
ret = os.popen(‘ps axu|grep myweb_server.py|grep -v grep|grep python‘).readlines()
if len(ret) == 0:
os.system("cd /home/xxxx/yyy/bbb/; sudo ./ggg/myweb_server.py")
except:
print "Error", sys.exc_info()[1]
if __name__ == "__main__":
mz = MonitorZjct()
mz.run()
--------------------------------
这个py代码,每隔5秒检测一下myweb_server.py进程是否存在,如果不存在,就重新启动这个进程。
这个进程需要开机自动启动,按照如下方式操作:
1. 创建/etc/init.d/monitor_zjct文件,内容如下:
--------------------------------
#!/bin/bash
#cp this file to /etc/init.d/
EXE="/home/xxx/monitor_zjct.py"
PIDFILE=/var/run/monior_zjct.pid
d_start(){
start-stop-daemon --start --quiet --background --m --pidfile $PIDFILE --exec $EXE
}
d_stop(){
start-stop-daemon --stop --quiet --pidfile $PIDFILE
rm -rf $PIDFILE
}
case $1 in
start)
d_start
;;
stop)
d_stop
;;
restart)
d_stop
sleep 1
d_start
;;
*)
echo "usage: $NAME {start|stop|restart}"
exit 1
;;
esac
exit 0
--------------------------------
这个脚本以daemon的方式启动monitor_zjct.py。
2. 在/etc/rc.local里,加入一行语句"/etc/init.d/monitor_zjct start"。
3. 每次开机会自动启动monitor_zjct.py,它启动后,会检查进程,发现tornado程序没有运行,于是启动tornado程序,网站就开始运行了。
要想关闭tornado程序,需要先关掉monitor_zjct.py,否则它发现tornado进程不再,就会启动新的tornado进程。
如果要更新代码,每次更新代码之后,要kill掉tornado进程,5秒后,monitor_zjct.py会再次启动tornado进程,这时候运行的就是新代码了。
开机启动的自动监控大多与此类似,大同小异。
如果需要VPS,买Linode.com的,它家新推出每月10刀的主机,性能绝佳,如果选择东京的机房,从大陆访问很快,用海外的主机不需要备案,这是最大的卖点。
网站的tornado代码运行了,网站可以访问了。有时候网站会因为各种原因崩溃,比如被攻击,代码bug,流量太大等等。
这时候就需要一个自动监控脚本。这个脚本监控网站的tornado进程,每隔几秒检测一次进程,如果发现进程不在了,就重新启动进程。有了它,你就不用半夜被叫醒重启网站了。
zuijiacanting.com的自动监控脚本类似这样,moniter_zjct.py
--------------------------------
#!/usr/bin/env python
#!-*- coding:utf-8 -*-
import os
import time
import sys
class MonitorZjct:
def run(self):
while True:
time.sleep(5)
try:
ret = os.popen(‘ps axu|grep myweb_server.py|grep -v grep|grep python‘).readlines()
if len(ret) == 0:
os.system("cd /home/xxxx/yyy/bbb/; sudo ./ggg/myweb_server.py")
except:
print "Error", sys.exc_info()[1]
if __name__ == "__main__":
mz = MonitorZjct()
mz.run()
--------------------------------
这个py代码,每隔5秒检测一下myweb_server.py进程是否存在,如果不存在,就重新启动这个进程。
这个进程需要开机自动启动,按照如下方式操作:
1. 创建/etc/init.d/monitor_zjct文件,内容如下:
--------------------------------
#!/bin/bash
#cp this file to /etc/init.d/
EXE="/home/xxx/monitor_zjct.py"
PIDFILE=/var/run/monior_zjct.pid
d_start(){
start-stop-daemon --start --quiet --background --m --pidfile $PIDFILE --exec $EXE
}
d_stop(){
start-stop-daemon --stop --quiet --pidfile $PIDFILE
rm -rf $PIDFILE
}
case $1 in
start)
d_start
;;
stop)
d_stop
;;
restart)
d_stop
sleep 1
d_start
;;
*)
echo "usage: $NAME {start|stop|restart}"
exit 1
;;
esac
exit 0
--------------------------------
这个脚本以daemon的方式启动monitor_zjct.py。
2. 在/etc/rc.local里,加入一行语句"/etc/init.d/monitor_zjct start"。
3. 每次开机会自动启动monitor_zjct.py,它启动后,会检查进程,发现tornado程序没有运行,于是启动tornado程序,网站就开始运行了。
要想关闭tornado程序,需要先关掉monitor_zjct.py,否则它发现tornado进程不再,就会启动新的tornado进程。
如果要更新代码,每次更新代码之后,要kill掉tornado进程,5秒后,monitor_zjct.py会再次启动tornado进程,这时候运行的就是新代码了。
开机启动的自动监控大多与此类似,大同小异。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。