python 限制同一时间只执行一个
作服務器端開發的同窗應該都對進程監控不會陌生,最近剛好要更換 uwsgi 爲 gunicorn,而gunicorn又剛好有這麼一章講進程監控,因此多研究了下。python
結合以前在騰訊工做的經驗,也會講講騰訊的服務器監控是怎麼作的。同時也會講下小團隊又該怎麼敏捷的解決。web
下面按照監控的方法依次介紹。shell
1、按照進程名監控服務器
在騰訊內部全部server都是要打包發佈的,而在打包過程當中是須要填寫要監控的進程名,而後在crontab中定時經過ps查詢進程是否存在。app
這種方法是比較簡單的方法,可是考慮到不少進程會在啓動以後更名,以及進程名存在各類特殊字符,多個進程同時存在的問題,實際操做起來並非很舒服。socket
舉個簡單的例子,gunicorn啓動以後的進程名相似這樣 master: [wsgi:app],其中的方括號在grep時要記得轉義,不然就會出問題。tcp
不過無論怎麼說,這種方法在不少其餘方式用不了的時候反而是最簡單的方法。this
下面是用python的實現:阿里雲
def monitor_process(key_word, cmd): p1 = subprocess.Popen(['ps', '-ef'], stdout=subprocess.PIPE) p2 = subprocess.Popen(['grep', key_word], stdin=p1.stdout, stdout=subprocess.PIPE) p3 = subprocess.Popen(['grep', '-v',