1.鑳屾櫙浠嬬粛涓轰簡淇濊瘉涓婄嚎椤圭洰鐨勭ǔ瀹氭€э紝闇€瑕佸娆¢噸鍚富绠″け璐ョ殑杩涚▼锛屽苟鍙戝嚭閽夐拤鍛婅锛屼互渚跨浉鍏虫妧鏈汉鍛樺強鏃跺鐞嗐€傚叿浣撳疄鐜版晥鏋滃涓嬶細2.鍩虹鐭ヨ瘑杩欓噷缁欐病鎺ヨЕ杩噑upervisor鍜岄拤閽夋満鍣ㄤ汉鐨勮鑰呭仛涓€涓壂鐩层€傚鏋滀綘宸茬粡寰堢啛鎮変簡锛屽彲浠ョ洿鎺ヨ烦杩囥€?銆佷粈涔堟槸涓荤锛烻upervisor鏄竴涓彲闈犵殑杩涚▼绠$悊宸ュ叿锛岀敱python缂栧啓銆傚畠灏嗙洃瑙嗗畠绠$悊鐨勫瓙娴佺▼銆傚綋杩涚▼鎰忓宕╂簝鏃讹紝浼氬皾璇曢噸鍚苟缁х画鎵ц锛堝彲浠ヨ缃渶澶ф鏁帮紝涓€鑸笉浼氭棤闄愭媺璧峰け璐ョ殑杩涚▼锛夈€傛垜浠彧闇€瑕佺煡閬撳畠鐨勪竴鑸姛鑳藉嵆鍙€傝鎯呰鍙傝€冧富绠″畼缃戙€?.浠€涔堟槸閽夐拤鏈哄櫒浜猴紵閽夐拤鏈哄櫒浜哄熀浜庨拤閽夎蒋浠讹紝鏄拤閽夌兢鍔熻兘鐨勬墿灞曘€傜兢鑱婃満鍣ㄤ汉鍙互灏嗙涓夋柟鏈嶅姟鐨勪俊鎭仛鍚堝埌缇よ亰涓紝瀹炵幇淇℃伅鐨勮嚜鍔ㄥ寲鍚屾銆傛満鍣ㄤ汉鏈夊緢澶氱锛屾瘮濡俫itlab鏈哄櫒浜猴紝github鏈哄櫒浜猴紝coding鏈哄櫒浜恒€傝繖閲屾垜浠娇鐢ㄨ嚜瀹氫箟鏈哄櫒浜恒€傝鎯呰鍙傝€冨畼缃戜粙缁嶃€傜偣鍑绘満鍣ㄤ汉绠$悊锛屼細鍑虹幇鏈哄櫒浜虹鐞嗚彍鍗曘€傚叾浣欐楠ゅ湪瀹樼綉閮芥湁璇︾粏璇存槑銆傛垜浠€氳繃鍚戣繖涓猽rl鍙戣捣post璇锋眰鏉ュ彂鍑哄憡璀︼紝杩欎釜url鏄繖鏍风殑锛歨ttps://oapi.dingtalk.com/robot/send?access_token=XXXXXX锛坧s锛氭湰鏂囬噰鐢ㄩ檺ip绛栫暐锛?.閰嶇疆Supervisor鐨別ventlistener棣栧厛鏌ョ湅supervisoreventlistner鐨勯厤缃枃浠跺唴瀹癸細[eventlistener:monitor]command=/home/zero/supervisord.d/monitor.pyevents=PROCESS_STATE_FATALstdout_logfile=/var/log/supervisor/script_log/monitor.logstderr_logfile=/var/log/supervisor/script_log/monitor@error.log绠€鍗曞垎鏋愪竴涓嬩笂闈㈤厤缃殑绗竴琛岋細[eventlistener:monitor]锛屾帴瑙﹁繃supervisor鐨勫悓瀛﹂兘鐭ラ亾锛宻upervisor鐨勫瓙杩涚▼鐨勯厤缃竴鑸槸绗竴琛屼竴鑸槸[program:processname]鐨勫舰寮忥紝杩欓噷鏄痆eventlistener:listenername]鐨勫舰寮忥紝璇存槑杩欐槸涓€涓叧浜庝簨浠剁洃鍚櫒鐨勯厤缃紝鐩戝惉鍣ㄧ殑杩涚▼鍚嶅彨鍋歮onitor銆傜浜岃锛歝ommand=/home/zero/supervisord.d/monitor.py琛ㄧず鎵ц杩涚▼鐨勫懡浠わ紝涓嬮潰浼氳缁嗕粙缁嶏紝杩欓噷鏆備笖蹇界暐銆傜涓夎锛歟vents=PROCESS_STATE_FATAL锛屼唬琛ㄧ洃鍚櫒鐩戝惉鐨勪簨浠躲€傛埅姝upervisor4.1杩欎釜鐗堟湰锛岀洰鍓嶆敮鎸?3涓簨浠讹紝瀹冧滑鍒嗗埆鏄細PROCESS_STATEPROCESS_STATE_STARTINGPROCESS_STATE_RUNNINGPROCESS_STATE_BACKOFFPROCESS_STATE_STOPPINGPROCESS_STATE_EXITEDPROCESS_STATE_STOPPEDPROCESS_STATE_FATALPROCESS_STATE_UNKNOWNREMOTE_COMMUNICATIONPROCESS_LOG_STDOUTPROCESS_LOG_STDERRPROCESS_COMMUNICATION_STDOUTPROCESS_COMMUNICATION_STDERRSUPERVISOR_STATE_CHANGESUPERVISOR_STATE_CHANGE_RUNNINGSUPERVISOR_STATE_CHANGE_STOPPINGTICK_5TICK_60TICK_3600PROCESS_GROUPPROCESS_GROUP_ADDEDPROCESS_GROUP_REMOVED璇︾粏鐨勪粙缁嶅彲浠ユ煡鐪嬭繖閲岃繖閲屾垜浠叧娉ㄧ殑鏄疨ROCESS_STATE_FATAL浜嬩欢锛岃繖涓簨浠舵槸浠€涔堟剰鎬濆憿锛烼hefollowingistheforeignlanguageoftheofficialwebsite:IndicatesaprocesshasmovedfromtheBACKOFFstatetotheFATALstate.ThismeansthatSupervisortriedstartretriesnumberoftimesunsuccessfullytostarttheprocess,andgaveupattemptingtorestartit.Whenthiseventoccurred,ItmeansthatthechildprocessofsupervisorhaschangedfromBACKOFFtoFATALstate.琛ㄧずsupervisor澶氭灏濊瘯閲嶅惎瀛愯繘绋嬶紙閲嶅惎娆℃暟锛岀湅鑷繁鐨勯厤缃級锛岃繕鏄け璐ワ紝鍐冲畾鏀惧純绗洓琛屽拰绗簲琛岋細浠h〃鏍囧噯杈撳嚭鏃ュ織鍜岄敊璇棩蹇楃殑杈撳嚭浣嶇疆鐩戝惉杩囩▼涓洃鍚櫒鐨勫疄鐜?銆佺紪鍐檈ventlistener鐩戝惉鑴氭湰杩欓噷鎴戜滑鎺ョ涓婇潰鎻愬埌鐨勫懡浠ら厤缃」銆傚懡浠ら厤缃墠鏄痚ventlistener鐪熸鐩戝惉鐨勭湡姝f墽琛岃€咃紝涔熷氨鏄笂闈㈡彁鍒扮殑/home/zero/supervisord.d/monitor.py鑴氭湰銆傜悊璁轰笂锛岀洃鎺ц剼鏈彲浠ョ敤浠讳綍璇█缂栧啓锛屼絾鏄敱浜巗upervisor鏈韩鏄敤python缂栧啓鐨勶紝骞朵笖鎻愪緵浜嗕竴涓悕涓簊upervisor.childutils鐨勬ā鍧椼€傝繖鏍凤紝浣跨敤python鑴氭湰缂栧啓鐩戝惉鍣ㄥ氨浼氬彉寰楀紓甯哥畝鍗曘€傚畼缃戞彁渚涗簡涓€涓畝鍗曠殑馃憞demo馃憞锛屾垜浠鍋氱殑灏辨槸瀵筪emo杩涜浜屾寮€鍙戯紝浠g爜濡備笅锛?!/usr/bin/envpythonimportsysimporturllib2importjsondefwrite_stdout(s)锛?鍙湁浜嬩欢鐩戝惉鍣ㄥ崗璁秷鎭彲浠ュ彂閫佸埌鏍囧噯杈撳嚭sys.stdout.write(s)sys.stdout.flush()defwrite_stderr(s):sys.stderr.write(s)sys.stderr.flush()defmain():while1:#transitionfromACKNOWLEDGEDtoREADYwrite_stdout('READY\n')#璇诲彇鏍囬琛屽苟灏嗗叾鎵撳嵃鍒皊tderrline=sys.stdin.readline()#璇诲彇浜嬩欢璐熻浇骞跺皢鍏舵墦鍗板埌stderrheaders=dict([x.split(':')forxinline.split()])notifyData=sys.stdin.read(int(headers['len']))title="warningonline"content="###supervisorsub澶勭悊澶辫触\n"+">\n"+">"+notifyData+"\n"url="璁剧疆鑷畾涔夋満鍣ㄤ汉鏃惰幏鍙栫殑閾炬帴"headers={'Content-Type':'application/json'}body={'msgtype':'markdown','markdown':{'title':title,'text':content,'at':{'isAtAll':'true'}}}request=urllib2.Request(url,headers=headers,data=json.dumps(body))response=urllib2.urlopen(request)#浠嶳EADY杩囨浮toACKNOWLEDGEDwrite_stdout('RESULT2\nOK')if__name__=='__main__':main()锛坧s锛氳繖閲屾槸鏀寔markdown鏍煎紡鐨勫憡璀﹀唴瀹癸級濂戒簡锛岄厤缃畬鎴愶紝enjoy锛侊紒锛佷釜浜鸿兘鍔涙湁闄愶紝濡傛湁閿欒锛岃繕鏈涙寚鍑猴紒6銆佸弬鑰冭祫鏂檚upervisor瀹樼綉http://www.supervisord.org/index.html閽夐拤鏂囨。鏈哄櫒浜哄畼缃戞枃妗ttps://ding-doc.dingtalk.com/doc#/serverapi2/krgddi
