daemontools & supervise

daemontools & supervisevim

daemontools工具

概念:daemontools是用來監控進程的工具。

安裝daemontools:
	# 下載包
	wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
	# 解壓
	tar -zxvf daemontools-0.76.tar.gz

	# 編譯。	注意:安裝過程當中須要建立/service和/command目錄,故須要root權限。
	cd admin/daemontools-0.76
	sudo package/install

	# 此時會報錯 "/usr/bin/ld: errno: TLS definition in /lib64/libc.so.6 section .tbss mismatches non-TLS reference in envdir.o"
	# 解決:在 src/conf-cc 第一行的最後加上" -include /usr/include/errno.h" 後,從新執行 package/install 便可。

啓動daemontools:
	/command/svscanboot &
	# 說明:
		經過"ls /command/"能夠看到daemontools下的命令,svscanboot啓動以後會啓動svscan,svscan啓動後會啓動supervise。
		svscan每隔5s會去檢查/service目錄,若是有新的服務,則啓動新的supervise;若是有supervise意外退出會重啓supervise(注:若supervise是正常退出的,則不會重啓)。
	

驗證:
	ps aux | grep svscan

	# 若查詢到以下進程,則表示啓動成功。
	/bin/sh /command/svscanboot
	svscan /service


daemontools中的supervise命令:

	概念:supervise命令用來監控指定的進程,當監控的進程掛掉後,supervise會自動重啓該進程。

	格式:supervise xxxx/xxxService	# xxxx/xxxService是一個目錄,supervise會監控這個目錄,該目錄下必須包含名稱爲run的文件。

	使用:
		第一步:建立服務目錄,準備run文件

			舉例:建立服務目錄:/home/work/jxn-test/agent ,將要監控的進程的啓動命令須要放到run文件中:

				vim /home/work/jxn-test/agent/run
				#!/bin/sh
				sh realCmd.sh
				# 注意:
				#	1>服務的啓動命令,不能是nohup啓動的,由於nohup執行的太快了,最後致使nohup正常結束後,supervise認爲nohup進程掛掉了,故會不斷地去運行run。
				#	2>必須在run腳本的開頭寫上 #!/bin/sh ,不然報錯:supervise: fatal: unable to start /home/work/jxn/my-service/run: exec format error

				# 給run文件添加執行權限
				chmod 755 run

				# 創建連接,方便管理和查看。
				ln -sf /home/work/jxn-test/agent /service/


		第二步:啓動監控

				啓動監控:svc -u /home/work/jxn-test/agent  (或:svc -u /service/agent)
				關閉監控:svc -d /home/work/jxn-test/agent
				關閉監控而且中止服務:svc -dk /home/work/jxn-test/agent

				說明:svc命令是用來控制那些被supervise監控的服務的。svc是間接控制服務的,它其實是經過控制supervise來控制服務。

				格式:svc 參數 xxxx/xxxService

				參數:
					-u 	 	up,啓動對該服務的監控。
								注:也能夠直接使用supervise命令來啓動監控:nohup supervise /home/work/jxn-test/agent > svsrun.log 2>&1 &
					-d 	 	down,中止對該服務的監控,即中止supervise對該服務的監控。
								注:服務不會所以而關閉,若咱們要關閉服務,則使用-k參數或手動kill掉服務。
					-o 		once,若是該服務沒有運行,則啓動該服務,以後若該服務掛掉了,supervise也不會再去啓動該服務了。
					-k 		kill,給服務發送一個KILL信號。
					-x 		exit,中止對該服務的監控,而且中止該服務的supervise進程,該服務對應的supervise進程中止後,咱們就沒法使用svc命令了。	
								注意:咱們通常不會使用該參數!若是服務對應的supervise進程被停掉(svc -x 服務目錄)或被kill掉,則咱們可使用"nohup supervise 服務目錄 & "來從新啓動該服務對應的supervise進程。

				查看服務的狀態:svstat xxxx/xxxService
				
				常見問題:
					問題:若不當心將服務目錄下的supervise目錄刪除後,會致使沒法使用svc命令:
						svc -u /home/work/jxn-test/agent
						提示:svc: warning: unable to control /home/work/jxn-test/agent: file does not exist

						svstat /home/work/jxn-test/agent
						提示:/home/work/jxn-test/agent: unable to open supervise/ok: file does not exist

					解決:
						先kill掉該服務以前的supervise進程:ps aux | grep "supervise /home/work/jxn-test/agent" | grep -v grep | awk '{print $2}' | xargs kill -9
						而後直接使用nohup supervise /home/work/jxn-test/agent > svsrun.log 2>&1 & 啓動,而後會自動生成supervise目錄,咱們就可使用svc命令了。
相關文章
相關標籤/搜索