复盘一次服务安装失败问题
目錄
- 前言
- 問題描述
- 問題分析
- 日志分析
- 重啟失敗服務
- 解決方案
- 總結
前言
記錄一下本周服務改造過程踩坑經歷。近期在做服務改造接入統(tǒng)一配置中心,對一些早期的服務進行升級,由此帶來了不少問題,好在都在測試環(huán)境解決了,平穩(wěn)上線。
問題描述
代碼自動構建后,部署服務啟動失敗。到測試服務器上手動啟動服務報錯“錯誤1053:服務沒有及時響應啟動或控制請求”,如圖:
修復問題后服務無法重啟,希望能找到一個不重啟服務器的方法重新安裝啟動服務。
問題分析
基本套路還是一樣的,程序員的法寶:Debug和Log。
日志分析
分析的日志有三個方面可以參考:服務啟動打印的日志,系統(tǒng)自帶的事件日志,命令行啟動日志。 下面逐個分析使用場景和結論。
系統(tǒng)自帶日志
一般的程序錯誤都會在系統(tǒng)日志里面留下痕跡,即使是程序崩潰了,只要系統(tǒng)沒有崩潰都會有記錄。
遺憾的是,本次應用程序錯誤后臺只有簡單提示“服務沒有及時響應啟動或控制請求”。無法判斷是否環(huán)境問題。
查看安裝日志,如圖,沒有找到太多有價值信息。
服務啟動日志
如果能走到這步,后臺有程序輸出的記錄日志,一般都是啟動服務進入到程序里面才報錯的,通過調試可以快速定位問題。
查詢日志中心,本次沒有生成新的日志,開啟調試開關,本地也沒有生成記錄日志。可以判斷還沒有走到程序內部。
命令行日志
如果是某個沒有捕捉到的問題,直接拖到命令行啟動倒是一個好方法,可以直接從控制臺看到某些錯誤信息。
果然,通過這一步看到了錯誤提示。詳細日志略過(敏感內容就不貼了。。。),簡單的說就是配置沒有更新,某個依賴項服務沒有注冊導致服務dump。
進一步使用SC命令可以查詢到其實服務是處于star-pending狀態(tài)。到此終于可以知道為何啟動不起來了。
重啟失敗服務
接下來我們刪除這個啟動失敗的服務,有兩種處理方式:
InstallUtil.exe /u [FullPath\ServiceName.exe]SC delete [ServiceName]
我采用了第一種使用SC命名的方式,得到了如下的結果
然后安裝服務,報1058的錯誤。查看服務列表,這時候服務還是存在于列表中,只是狀態(tài)是禁用。
Google了一下,這種情況只需要重啟后繼續(xù)安裝就可以。問題來了,服務器能隨便重啟嗎?不說生產的服務器,就是測試的服務器上面也部署了各種服務,幾百號人在開發(fā)測試呢。。。總不能等到下班后重啟服務器吧,找了一下,這種情況就只能刪除注冊表重新打開服務列表查看:
刪除注冊表項HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\你的服務名
找了一下卸載的原理,園子里這篇Windows API 之 Windows Service讓我了解到:
刪除服務的本質是在注冊表里面刪除該服務的注冊表鍵以及該鍵的子鍵。
- 標記該服務為可刪除的服務
- 檢查該服務是否已經停止,并且該牽涉到該服務的所有句柄都已經被關閉的時候,再來刪除該服務;
- 如果該服務一直都在運行狀態(tài),那么就等到下次機器重啟的時候,來刪除該服務
關鍵點在于:服務所有引用的句柄都已經被關閉。
解決方案
修復造成程序啟動失敗問題
以下幾點可以在系統(tǒng)事件查看器看到錯誤日志:
- 檢查安裝工具InstallUtil.exe版本是否一致
- 檢查配置文件startup的.NETFramework版本是否一致
- 如果添加服務使用了特別賬戶,檢查是否賦予了分組權限
以下幾點需要仔細check:
- 配置文件是否正確
- 依賴項是否全部打包正確
確認待刪除服務沒有被占用
- 確保服務器只有你一個用戶在線操作待刪除服務
- 任務管理器工具(包括Process Explorer等)關閉對待刪除服務訪問
- 服務控制臺和MMC均沒有打開待刪除服務
- 事件查看器沒有打開待刪除服務
- Visual Studio遠程調試沒有打開待刪除服務
停止(stop)服務,然后刪除(delete)服務,最后重建(create)服務
總結
這其實是一個典型的研發(fā),測試,運維合作解決問的過程。每個公司的自動化運維構建平臺都會有各種不同的規(guī)定,例如配置更新問題。
部署的時候需要按照一定的流程,有一張checklist能減少問題發(fā)生。
本文主要講了安裝服務失敗后卸載服務的處理方式,記錄下來,希望對遇到相同問題的人有一個參考。
推薦使用SC命名行的方式操作安裝和卸載服務,可以滿足更多的需求而不必重新打包。例如安裝不同版本的同一個.exe服務,只是端口和服務名稱不一樣。
本文同步發(fā)表在公眾號文章 復盤一次服務安裝失敗問題
轉載于:https://www.cnblogs.com/lijinfeng042/p/10296804.html
總結
以上是生活随笔為你收集整理的复盘一次服务安装失败问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的世界作者是谁啊?
- 下一篇: [UWP]实现一个轻量级的应用内消息通知