一個站點的誕生09--自己主動監控
阿新 • • 發佈:2017-06-05
tor def open 代碼執行 sage ng- blank 由於 站點
部署Web App。須要買一個域名,我推薦http://www.namecheap.com/,用信用卡或者paypal付款,一年10刀。
假設須要VPS,買Linode.com的,它家新推出每月10刀的主機,性能絕佳,假設選擇東京的機房,從大陸訪問非常快,用海外的主機不須要備案,這是最大的賣點。
站點的tornado代碼執行了,站點能夠訪問了。有時候站點會由於各種原因崩潰,比方被攻擊。代碼bug,流量太大等等。
這時候就須要一個自己主動監控腳本。這個腳本監控站點的tornado進程,每隔幾秒檢測一次進程。假設發現進程不在了,就又一次啟動進程。
--------------------------------
#!/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程序,站點就開始執行了。
假設須要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進程,這時候執行的就是新代碼了。
開機啟動的自己主動監控大多與此類似,大同小異。
一個站點的誕生09--自己主動監控