复盘一次服务安装失败问题
目录
- 前言
- 问题描述
- 问题分析
- 日志分析
- 重启失败服务
- 解决方案
- 总结
前言
记录一下本周服务改造过程踩坑经历。近期在做服务改造接入统一配置中心,对一些早期的服务进行升级,由此带来了不少问题,好在都在测试环境解决了,平稳上线。
问题描述
代码自动构建后,部署服务启动失败。到测试服务器上手动启动服务报错“错误1053:服务没有及时响应启动或控制请求”,如图:
修复问题后服务无法重启,希望能找到一个不重启服务器的方法重新安装启动服务。
问题分析
基本套路还是一样的,程序员的法宝:Debug和Log。
日志分析
分析的日志有三个方面可以参考:服务启动打印的日志,系统自带的事件日志,命令行启动日志。 下面逐个分析使用场景和结论。
系统自带日志
一般的程序错误都会在系统日志里面留下痕迹,即使是程序崩溃了,只要系统没有崩溃都会有记录。
遗憾的是,本次应用程序错误后台只有简单提示“服务没有及时响应启动或控制请求”。无法判断是否环境问题。
查看安装日志,如图,没有找到太多有价值信息。
服务启动日志
如果能走到这步,后台有程序输出的记录日志,一般都是启动服务进入到程序里面才报错的,通过调试可以快速定位问题。
查询日志中心,本次没有生成新的日志,开启调试开关,本地也没有生成记录日志。可以判断还没有走到程序内部。
命令行日志
如果是某个没有捕捉到的问题,直接拖到命令行启动倒是一个好方法,可以直接从控制台看到某些错误信息。
果然,通过这一步看到了错误提示。详细日志略过(敏感内容就不贴了。。。),简单的说就是配置没有更新,某个依赖项服务没有注册导致服务dump。
进一步使用SC命令可以查询到其实服务是处于star-pending状态。到此终于可以知道为何启动不起来了。
重启失败服务
接下来我们删除这个启动失败的服务,有两种处理方式:
InstallUtil.exe /u [FullPath\ServiceName.exe]
SC delete [ServiceName]
我采用了第一种使用SC命名的方式,得到了如下的结果
然后安装服务,报1058的错误。查看服务列表,这时候服务还是存在于列表中,只是状态是禁用。
Google了一下,这种情况只需要重启后继续安装就可以。问题来了,服务器能随便重启吗?不说生产的服务器,就是测试的服务器上面也部署了各种服务,几百号人在开发测试呢。。。总不能等到下班后重启服务器吧,找了一下,这种情况就只能删除注册表重新打开服务列表查看:
删除注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\你的服务名
找了一下卸载的原理,园子里这篇Windows API 之 Windows Service让我了解到:
删除服务的本质是在注册表里面删除该服务的注册表键以及该键的子键。
- 标记该服务为可删除的服务
- 检查该服务是否已经停止,并且该牵涉到该服务的所有句柄都已经被关闭的时候,再来删除该服务;
- 如果该服务一直都在运行状态,那么就等到下次机器重启的时候,来删除该服务
关键点在于:服务所有引用的句柄都已经被关闭。
解决方案
修复造成程序启动失败问题
以下几点可以在系统事件查看器看到错误日志:
- 检查安装工具InstallUtil.exe版本是否一致
- 检查配置文件startup的.NETFramework版本是否一致
- 如果添加服务使用了特别账户,检查是否赋予了分组权限
以下几点需要仔细check:
- 配置文件是否正确
- 依赖项是否全部打包正确
确认待删除服务没有被占用
- 确保服务器只有你一个用户在线操作待删除服务
- 任务管理器工具(包括Process Explorer等)关闭对待删除服务访问
- 服务控制台和MMC均没有打开待删除服务
- 事件查看器没有打开待删除服务
- Visual Studio远程调试没有打开待删除服务
停止(stop)服务,然后删除(delete)服务,最后重建(create)服务
总结
这其实是一个典型的研发,测试,运维合作解决问的过程。每个公司的自动化运维构建平台都会有各种不同的规定,例如配置更新问题。
部署的时候需要按照一定的流程,有一张checklist能减少问题发生。
本文主要讲了安装服务失败后卸载服务的处理方式,记录下来,希望对遇到相同问题的人有一个参考。
推荐使用SC命名行的方式操作安装和卸载服务,可以满足更多的需求而不必重新打包。例如安装不同版本的同一个.exe服务,只是端口和服务名称不一样。
本文同步发表在公众号文章 复盘一次服务安装失败问题
转载于:https://www.cnblogs.com/lijinfeng042/p/10296804.html
复盘一次服务安装失败问题相关推荐
- linux r服务安装失败,R包:RCurl和curl包在Linux上安装失败
我希望你能为我在为R安装RCurl和卷曲包时遇到的这个问题提供帮助. Rd warning: /tmp/RtmpOBkvFC/R.INSTALLd07e6c06faf4/RCurl/man/url.e ...
- linux r服务安装失败,linux下R安装RMySQL不成功 configuration failed for package ‘RMySQL’...
linux下R安装RMySQL不成功 configuration failed for package 'RMySQL'#install.packages('RMySQL') 报错: 将程序包安装入' ...
- 解决办法在安装完Nginx后服务启动失败
在安装完Nginx后服务启动失败的解决办法 systemctl start nginx //启动服务 Job for nginx.service failed because the control ...
- mysql服务remove失败_《MySQL数据库》MySql简介、下载与安装
一.MySQL的简介 MySQL,是一个关系型数据库管理系统,它是由瑞典MySQL AB公司开发的产品,之后被Sun公司收购:在2009年4月20日,Sun公司被Oracle公司收购:从此MySQl属 ...
- mysql安装服务和安装中常见问题install/Remove of the Service Denied与net start mysql服务启动失败解决方法
mysql安装服务和安装中常见问题install/Remove of the Service Denied与net start mysql服务启动失败解决方法 参考文章: (1)mysql安装服务和安 ...
- phpnow 安装apache失败_PHPnow安装服务[apache_pn]失败的问题的解决方法
安装PHPnow时如果遇到下列问题: 安装服务[apache_pn]失败.可能原因如下: 1. 服务名已存在,请卸载或使用不同的服务名. 2. 非管理员权限,不能操作 Windows NT 服务. 请 ...
- paip.花生壳 服务启动失败 以及不能安装服务,权限失败的解决
paip.花生壳 服务启动失败 以及不能安装服务,权限失败的解决 系统win7 NewPhDDNS_1.0.0.30166.exe 作者Attilax 艾龙, EMAIL:1466519819@q ...
- windows服务安装(System.ComponentModel.Win32Exception:远程过程调用失败)
"安装"阶段发生异常.System.ComponentModel.Win32Exception:远程过程调用失败 附上提示信息 C:\Windows\Microsoft.NET\F ...
- 《绝地求生大逃杀》BE错误怎么办 BE服务未正常运行及安装失败解决方法
<绝地求生大逃杀>BattlEye Launcher是游戏的反作弊程序,也是启动过程中做容易出现错误的,今天小编带来"爆锤吧务"分享的<绝地求生大逃杀>BE ...
最新文章
- CNN之性能指标:卷积神经网络中常用的性能指标(IOU/AP/mAP、混淆矩阵)简介、使用方法之详细攻略
- 【深度学习】深度学习模型中的信任危机及校正方法
- hbase中对deadserver处理存在的问题
- iBatis.Net(C#)SQL数据映射
- swiper怎么在HTML引入JS文件,Swiper.js插件超简单实现轮播图
- Android中的Context理解
- 广安a货翡翠,自贡a货翡翠
- Python3 循环删除列表中的指定变量
- 线性插值 多项式插值 样条插值 牛顿插值总结
- Jenkins把GitHub项目做成Docker镜像
- 生活计算机的模拟环境中,惊人发现:人类生活在高等文明创建的模拟环境中!...
- SONY笔记本电脑SVS131100C系统重装后Fn键功能问题
- [codeforces 1379B] Dubious Cyrpto 公式推导
- 微信小程序 async await解决异步问题
- 还有人在质疑数据挖掘是泡沫吗?千万不要叶公好龙
- 普通青年 文艺青年 2B青年
- 2022 年最新版 68 道 Redis 面试题,20000 字,赶紧收藏起来备用
- 深度学习之图像分类(六)--Inception进化史
- 抑制细胞代谢紊乱的抑制剂
- python多个列表排列组合_多个列表的排列组合(笛卡儿积) | 迭代实现
热门文章
- 2022-2028年中国共享住宿行业深度调研及投资前景预测报告
- 取消打开命令行进入默认anaconda的环境
- 1 用python进行OpenCV实战之用OpenCV3实现图片载入、显示和储存
- 对装饰器@wraps的解释(一看就懂)-- 并对装饰器详解
- LeetCode简单题之判断字符串的两半是否相似
- 如何将算子添加到Relay
- IaaS、PaaS 和 SaaS:云服务模型概述
- 实时双频Wi-Fi如何实现下一代车内连接
- DCN-2655 同异步端口PPP (chap)认证
- java is not a enclosing class_Java Class getEnclosingClass()用法及代码示例