摘要:在一个实际项目中,最近突然后台应用一直被强行关闭,导致不能正常的访问。应用通过winSW将java编写的后台jar(spring框架)程序注册为一个服务。后续临时的解决办法为将此服务设置为在服务中断后,自行重启,使其能接着使用
上面的问题通过windows的事件日志,查找到对应错误信息。同时也是通过直接在对应服务上,点击鼠标右键属性设置。服务采用的winSW进行注册服务,这里也对winSW的使用做一个简单的记录(注:采用 winSW 注册为服务后,可以不用弹出Java运行的黑框体,大大讲减少了被 “不小心” 关闭的问题)。
一、问题现状
将 .jar应用程序注册为服务后,当服务挂掉,也意味着 .jar后台应用程序挂掉,在不会自行重启。
二、解决办法 2.1 设置服务中断恢复
01、恢复属性设置
设置服务在中断后,自行尝试重启动。
02、设置后的效果
通过以上设置后,在服务终端后,系统会自行去尝试重启此服务。
三、winSW使用及配置说明
前面提到是通过winSW进行将应用注册为服务,在winSW的配置文件分为两种,一种是最小配置;另一种是全配置文件。最小配置文件仅将应用程序注册问服务。全配置中则可以配置上方服务器终端后的恢复模式,优先级等等。对于这些参数个人并未一一尝试,这里仅为对 winSW作者给到的说明进行机翻,以便自己掌握。
winSW链接地址:https://github.com/winsw/winsw/releases
winSW配置文件内容
SjjdServiceID SjjdService 思杰软件 java -Xmx1024m -jar SjjdService.jar rotate
SjjdServiceStart.bat 文件内容
SjjdService.exe install net start SjjdService
SjjdServiceStop.bat 文件内容
net stop SjjdService SjjdService.exe uninstall
通过以上截图,winSW 的应用主要用以上几步:
- winSW.exe名称需要需要和配置文件一致winSW.exe、winSW配置文件、应用程序三者在同一目录 通过命令完成服务的开启或停止
主要命令有一下几种,通过此链接:https://github.com/winsw/winsw/blob/v3/docs/cli-commands.md#install-command 可以查看官网给到说明。
winsw install 安装服务 winsw uninstall 卸载服务 winsw start 开启服务 winsw stop 停止服务 winsw restart 重新启动服务 winsw status 检查服务的当前状态 3.2 配置说明 这里根据配置文件节点进行一段一段的分拆翻译,以下为全配置版本配置文件
01、必须配置项
原文:
myapp MyApp Service (powered by WinSW) This service is a service cratead from a sample configuration %base%myExecutable.exe
翻译:
| 标签 | 含义 |
|---|---|
| | 服务ID,在windows系统中,必须唯一 |
| | 服务显示名称,只能是英文或者数字 |
| | 对服务的描述,可以用于记录此服务有什么用 |
| | 启动可执行文件的路径,实际环境中,如果配置了Java环境变量,可以直接使用Java替代 |
02、安装相关
此相关配置进行修改后,需要重启服务才能生效
原文
翻译:
| 标签 | 含义 |
|---|---|
| windows的域,在windows sever系统上,这是很大一个功能块 | |
| 用户名,可在控制面板 —> 用户管理里面查看 | |
| 用户密码 | |
| 允许以服务形式登录 |
| 标签 | 含义 |
|---|---|
| < onfailure action="restart" delay="10 sec"/> | 第一失败后,执行什么操作。action 共计有3中模式
restart:重新启动服务reboot:重新启动计算机none:无操作 |
| 第二失败后,执行什么操作。action 共计有3中模式
restart:重新启动服务reboot:重新启动计算机none:无操作 | |
| 以上两次都失败后,执行什么操作。action 共计有3中模式
restart:重新启动服务reboot:重新启动计算机none:无操作 | |
| windows系统会有一个日志记录,并且计数。间隔多久后重置状态 |
03、执行管理配置
原文
Normal 15 sec false
翻译:
| 标签 | 含义 |
|---|---|
| 传递给可执行文件的参数。 | |
| 参数在可执行文件启动时传递给可执行文件,如果此处指定,则重写上方参数。 | |
| 如果指定,则设置可执行文件的默认工作目录。默认值:存放winSW文件的目录 | |
| 所需的进程优先级。值:Normal, Idle, High, RealTime, BelowNormal, AboveNormal 默认值:Normal,具体可查看表格 | |
| 当服务被要求停止时,winsw首先尝试调用GenerateConsoleCtrlEvent 方法(类似于Ctrl+C),然后等待长达15秒的时间,让进程自行退出。如果这样做了,进程关闭还是失败了(或者如果进程没有控制台),然后winsw会调用终止进程的API函数来立即终止服务。这个可选元素允许您改变这个“15秒”的值,这样您就可以控制winsw等待服务进程自行关闭的时间。如何指定时间期限,可参考下面的“onfailure”元素的设置 | |
| 可选地指定服务关闭的顺序。如果“true”,父进程首先关闭。当主进程是一个控制台时,这是很有用的,它可以响应Ctrl+C命令,并优雅地关闭子进程。 | |
| 请求停止服务时,winsw通过调用终止进程的API函数来立即终结服务。然而,如果存在“stopargument”元素,winsw将通过使用”stopargument“作为参数,来启动“executable“元素(或者是”stopexecutable“元素)中配置的进程,来代替调用终止进程的API函数。期望通过这种方式来优雅的关闭服务进程。然后,Winsw将等待两个进程自行退出,然后向Windows报告该服务已经终止。 | |
进程(线程)的优先级越高,那么就可以分占越多的CPU时间片,每个进程都有相应的优先级,优先级决定它何时运行和占用CPU的时间。最终的优先级共分 32 级,是从 0 到 31 的数值,称为基本优先级别。
| 优先级 | 标志 | 优先级值 |
|---|---|---|
| idle (低) | IDLE_PRIORITY_CLASS | 4 |
| Below (低于标准) | BELOW_NORMAL_PRIORITY_CLASS | |
| normal (标准) | NORMAL_PRIORITY_CLASS | 7或9 |
| Above (高于标准) | ABOVE_NORMAL_PRIORITY_CLASS | |
| high (高) | HIGH_PRIORITY_CLASS | 13 |
| realtime (实时) | REALTIME_PRIORITY_CLASS | 24 |
04、服务管理
原文
Automatic
15 sec
1 sec
翻译:
| 标签 | 含义 |
|---|---|
| 该元素指定Windows服务的启动模式。它可以是下列值之一:开机、系统、自动或手动。有关详细信息,请参阅MSDN【https://msdn.microsoft.com/en-us/library/aa384896%28v=vs.85%29.aspx】。默认值是“Automatic”。 | |
| 这个布尔选项允许在定义“自动”启动模式时延时启动。关于延时启动模式,可参阅【https://blogs.technet.microsoft.com/askperf/2008/02/02/ws2008-startup-processes-and-delayed-automatic-start】。 请注意,延时启动模式在早于Windows 7和Windows Server 2008的操作系统中可能失效。在这种情况下,Windows服务安装可能会失败。 | |
| 指定该服务所依赖的其他服务的id。当服务“X”依赖于服务“Y”时,“X”只能在“Y”运行后运行。可以使用多个元素来指定多个依赖项。 | |
| 多少秒后调用SetServiceStatus函数的时间,建议值 1 ~10 秒 | |
| 如果指定了这个可选的元素,那么该服务将被允许与桌面交互,比如显示一个新的窗口和对话框。如果你的程序需要GUI,那么设置如下:请注意,自从引入UAC(Windows Vista及之后的版本)以来,服务不再被允许与桌面交互。在这些操作系统中,所有这一切都是为了允许用户切换到一个单独的窗口来与服务交互。 |
05、服务进程的日志以及错误信息
原文
翻译:
| 标签 | 含义 |
|---|---|
| 生成的所有日志设置自定义日志目录,默认为winSW目录 | |
| 应用程序日志模式,共有一下几种,具体详情可以查看【https://github.com/winsw/winsw/blob/master/doc/loggingAndErrorReporting.md】
append:追加-更新现有日志none:不将日志保存到磁盘reset:重置-启动时擦除日志文件roll:滚动-根据日志的大小roll-by-time:滚动-根据日子时间rotate:滚动-根据日志大小(8个日志,每个10MB)。此模式已被弃用,请使用“滚动”。默认模式:追加 |
06、环境设置
原文
翻译:
| 标签 | 含义 |
|---|---|
| 可以多次指定的可选元素,为子进程设置环境变量。 | |
| 可以多次指定,让服务包装器从URL检索资源,并将其作为文件放置在本地。这个操作是在服务启动时运行的,在“executable”指定的应用程序启动之前。对于需要身份验证的服务器,必须根据认证的类型指定一些参数。只有基本身份验证需要额外的子参数。支持的身份验证类型是:
none:默认类型,不能指定sspi:微软认证,包括Kerberos、NTLM等。basic:基本身份认证,子参数包括:1)user=“UserName”,2)password=“Password”,3)unsecureAuth=“true”:default=“false” 当传输协议是未加密的HTTP数据传输时,参数“unsecureAuth”才生效。这是一个安全漏洞,因为凭证是用明文发送的!对于SSPI认证,这是不相关的,因为身份验证令牌是加密的。
|
07、其他选项
原文
翻译:
| 标签 | 含义 |
|---|---|
| 指示关闭时服务应发出蜂鸣音(如果操作系统支持)。 | |
| 自定义扩展,具体详情可以查看【https://github.com/kohsuke/winsw/blob/master/doc/extensions/extensions.md】 |
四、参考链接
winSW链接地址:https://github.com/winsw/winsw/releases
winsw说明
windows 域,windows domain
如何使用其他帐户将Apache ActiveMQ Artemis作为Windows服务运行
设置进程和线程的优先级



