關於nginx unit服務非正常關閉后,無法重新啟動問題的處理


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

  由於nginx unit它的服務重啟方式,是自動檢測配置文件是否有更改,然后才會自動重載,而python代碼發布以后,並沒有對配置進行更改,所以昨晚在進行代碼更新以后,發現運行的還是舊的程序,和呂哥溝通后他說等他想想解決辦法。早上一早就發信息過來並將執行代碼發了過來。一看原來是直接kill掉進程的方式,再通過運行服務啟動程序來進行重載。

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

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

  跟着執行啟動服務命令(這個命令的路徑,大家安裝的位置不同路徑是不一樣的,替換成自己的就可以執行了)

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

  命令執行以后發現先是報下面錯誤,但服務正常啟動了

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目錄都存在,沒有發現有什么問題

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

  檢查服務沒有啟動,解決不了只能輸入reboot重啟一下服務器,重啟后運行服務啟動命令還是報同樣的錯誤

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

  服務直接掛了啟動不了......

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

  沒有辦法的情況下,只能自己研究檢查了,看看日志有沒有什么記錄,查看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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM