關於nginx unit服務非正常關閉後,沒法從新啓動問題的處理

  昨天在前領導技術大牛呂哥的幫忙下,python服務管理從nginx+supervisor+uwsgi+python3改成了輕便結構nginx + unit + python3,部署和配置起來頓時輕鬆起來。服務器配置好之後趕忙上官網http://unit.nginx.org將英文文檔所有啃完,全面理解了它的運行原理。python

  因爲nginx unit它的服務重啓方式,是自動檢測配置文件是否有更改,而後纔會自動重載,而python代碼發佈之後,並無對配置進行更改,因此昨晚在進行代碼更新之後,發現運行的仍是舊的程序,和呂哥溝通後他說等他想一想解決辦法。早上一早就發信息過來並將執行代碼發了過來。一看原來是直接kill掉進程的方式,再經過運行服務啓動程序來進行重載。nginx

  而後我就拿測試服務器實驗了起來,在服務器上輸入下面命令,將unit進程kill掉服務器

kill -9 `ps -ef |grep unit|awk '{print $2}'`

  跟着執行啓動服務命令(這個命令的路徑,你們安裝的位置不一樣路徑是不同的,替換成本身的就能夠執行了)測試

/usr/local/src/unit/build/unitd

  命令執行之後發現先是報下面錯誤,但服務正常啓動了ui

2018/12/20 11:53:25 [alert] 1299#1299 Unable to create certificates storage directory: mkdir(state/certs/) failed (2: No such file or directory)
2018/12/20 11:53:25 [info] 1299#1299 bind(7, unix:control.unit.sock) failed (98: Address already in use)

  進入buile目錄下面發現state與certs目錄都存在,沒有發現有什麼問題spa

  輸入命令查看服務啓動狀態:ps -ef | grep unitunix

  檢查服務沒有啓動,解決不了只能輸入reboot重啓一下服務器,重啓後運行服務啓動命令仍是報一樣的錯誤日誌

2018/12/20 11:54:17 [alert] 1299#1299 bind(6, unix:control.unit.sock) failed (98: Address already in use)

  服務直接掛了啓動不了......code

  趕忙上goole和百度查詢解決方案,發現沒有一篇文章,難道只有我是這麼幹纔會出來這種個問題嗎?人品簡直是爆炸了blog

  沒有辦法的狀況下,只能本身研究檢查了,看看日誌有沒有什麼記錄,查看build目錄下面的unit.log並無什麼異常記錄。在檢查的過程當中發現build目錄下面有個0字節的文件名很可疑,名字跟錯誤提示中的信息同樣:control.unit.sock

  

  感受應該有多是這個文件形成的,因此嘗試使用刪除命令將它刪掉,而後再次運行服務啓動命令,發現一切恢復正常狀態,再次刷新這個文件夾,發現刪除掉的這個文件又出來了

  經過這樣操做的結果,能夠判斷unit在啓動後,它會在build目錄建立一個名爲control.unit.sock的文件,作爲服務鎖以防止服務同時啓動多個,而當服務被非正常狀態關閉時,可能就會引起這個文件沒有被同步清除,而致使服務沒法正常啓動。

  除了使用kill方法刪除unit進程之外,我還嘗試使用reboot直接啓動服務器,也試過出現一樣的問題,服務啓動不了。還好發現這個問題之後積極研究解決了,否則萬一線上系統哪一天要重啓,致使一樣的狀況發生而一直沒法訪問,那就影響大了去了。

 

版權聲明:本文原創發表於 博客園,做者爲 AllEmpty 本文歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然視爲侵權。

python開發QQ羣:669058475(本羣已滿)、733466321(能夠加2羣)    做者博客:http://www.cnblogs.com/EmptyFS/

相關文章
相關標籤/搜索