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命令了。