如何将jar包加入windows服务
-
编写于exe文件同名的xml配置文件
<service> <!-- ID of the service. It should be unique accross the Windows system--> <id>dam</id> <!-- Display name of the service --> <name>dam-manager</name> <!-- Service description --> <description>dam test</description> <!-- Path to the executable, which should be started --> <executable>java</executable> <arguments>-jar "E:\testwinsw\dam-manager.war" --server.port = 8088</arguments> </service>
-
注册服务
- 将配置文件和可执行文件放入同一个目录下,让winsw可以识别到配置文件
- 打开powershell窗口,执行命令 winsw(你的exe文件名) install,将程序注册成服务
- 打开windows服务窗口,启动服务
- 服务运行时相关信息都存放在于exe文件同级的目录下,通过日志观察服务启动情况
测试服务重启,停止,启动时。服务所运行jar包的状态
- 初次启动服务
-
查看dam日志,可以查看到启动日志,说明项目已经启动
-
进程中可以查看到运行的java进程
-
wrapper日志中可以查看服务启动信息
2019-05-13 13:46:45,427 INFO - Starting ServiceWrapper in the service mode 2019-05-13 13:46:45,445 INFO - Starting java -jar "E:\testwinsw\dam-manager.war" --server.port = 8088 2019-05-13 13:46:45,447 INFO - Starting java -jar "E:\testwinsw\dam-manager.war" --server.port = 8088 2019-05-13 13:46:45,455 INFO - Started process 14740 2019-05-13 13:46:45,457 DEBUG - Forwarding logs of the process System.Diagnostics.Process (java) to winsw.DefaultLogAppender
- 服务运行时,停止服务
-
在任务管理器中选择服务进行停止服务操作
-
进程列表中运行此服务的进程消失
-
查看wrapper日志,发现已经成功给发送kill procee命令,code 为0代表成功
2019-05-13 13:53:23,350 INFO - Stopping dam 2019-05-13 13:53:23,350 DEBUG - ProcessKill 14740 2019-05-13 13:53:23,402 INFO - Stopping process 14740 2019-05-13 13:53:23,405 INFO - Send SIGINT 14740 2019-05-13 13:53:23,863 INFO - SIGINT to14740 successful 2019-05-13 13:53:23,864 INFO - Finished dam 2019-05-13 13:53:23,877 DEBUG - Completed. Exit code is 0
- 服务运行时重新启动服务
-
清除所有日志信息
-
重新启动服务,所有信息与第一步操作保持一致
-
任务管理器中选择服务,找到此服务进行重新启动
-
进程中此服务的进程先消失然后迅速出现
-
wrapper日志中新增两条日志,分别为关闭和启动的日志
2019-05-13 14:03:14,385 INFO - Stopping dam 2019-05-13 14:03:14,385 DEBUG - ProcessKill 10648 2019-05-13 14:03:14,459 INFO - Stopping process 10648 2019-05-13 14:03:14,462 INFO - Send SIGINT 10648 2019-05-13 14:03:14,916 INFO - SIGINT to10648 successful 2019-05-13 14:03:14,917 INFO - Finished dam 2019-05-13 14:03:14,925 DEBUG - Completed. Exit code is 0 2019-05-13 14:03:15,760 INFO - Starting ServiceWrapper in the service mode 2019-05-13 14:03:15,799 INFO - Starting java -jar "E:\testwinsw\dam-manager.war" --server.port = 8088 2019-05-13 14:03:15,802 INFO - Starting java -jar "E:\testwinsw\dam-manager.war" --server.port = 8088 2019-05-13 14:03:15,809 INFO - Started process 3040 2019-05-13 14:03:15,812 DEBUG - Forwarding logs of the process System.Diagnostics.Process (java) to winsw.DefaultLogAppender
-
在项目输出日志中查找项目启动日志,可以查看到两条,说明项目确实重新启动了一次
- 重启电脑,查看服务情况
-
服务已经启动,存在于服务列表中
-
进程列表中存在此服务的进程
-
wapper日志中多出两条
2019-05-13 14:20:43,066 ERROR - Failed to log event in Windows Event Log. Reason: System.ComponentModel.Win32Exception (0x80004005): 接口未知。 在 System.Diagnostics.EventLogInternal.InternalWriteEvent(UInt32 eventID, UInt16 category, EventLogEntryType type, String[] strings, Byte[] rawData, String currentMachineName) 在 System.Diagnostics.EventLogInternal.WriteEntry(String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData) 在 System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type) 在 winsw.WrapperService.LogEvent(String message, EventLogEntryType type) 2019-05-13 14:21:17,613 INFO - Starting ServiceWrapper in the service mode 2019-05-13 14:21:17,723 INFO - Starting java -jar "E:\testwinsw\dam-manager.war" --server.port = 8088 2019-05-13 14:21:17,743 INFO - Starting java -jar "E:\testwinsw\dam-manager.war" --server.port = 8088 2019-05-13 14:21:17,793 INFO - Started process 1968 2019-05-13 14:21:17,803 DEBUG - Forwarding logs of the process System.Diagnostics.Process (java) to winsw.DefaultLogAppender
-
项目日志中添加了新的启动信息,说明服务确实被启动了