使用nssm将服务托管给win service
nssm官网:http://www.nssm.cc/
下载好nssm包后解压,找到nssm.exe文件,后续操作都需要以命令行启动
1.安装服务
PS E:\> .\nssm.exe install test
Administrator access is needed to install a service.
如果不想呼出图形化安装界面,可以执行nssm.exe install test C:
其中C:\代表安装路径,也就是下图中的path,其他的参数可以使用set再去调整
application
程序的具体位置
- path: 可执行文件的路径,如果是java程序,应该指定java.exe的位置,例如:C:\Program Files\Java\jdk1.8.0_144\bin\java.exe
- startup directory: 程序启动路径
- arguments: 启动参数,例如java程序的 -jar xxx.jar
命令行形式:
nssm set test Application "C:\Program Files\Java\jdk1.8.0_144\bin\java.exe"
nssm set test AppDirectory "D:\test"
nssm set test AppParameters "-jar xxx.jar"
Details
显示服务的详细信息
- display: 显示名称
- description: 备注信息
- startup type: 开机启动类型
命令行形式
nssm set test DisplayName UT2k3
nssm set test Description Unreal Tournament 2003
nssm set test Start SERVICE_AUTO_START
开机启动类型分别为
- SERVICE_AUTO_START: 开机自启
- SERVICE_DELAYED_AUTO_START: 开机延迟自启
- SERVICE_DEMAND_START: 手动启动
- SERVICE_DISABLED: 服务器不可用
Log on
运行账户,windows服务很少改这个
命令行形式
nssm set UT2003 ObjectName LocalSystem
nssm set UT2003 Type SERVICE_WIN32_OWN_PROCESS
Dependencies
依赖:指明当前服务运行前,必须启动哪个服务,例如java程序可能依赖mysql
命令行形式
nssm set test DependOnService MySQL
Process
可用于设置应用程序的进程 优先级和 CPU 亲和性。默认情况下,应用程序将以正常优先级运行,并允许在所有 CPU 上执行。如果您希望将进程限制为可用 CPU 的子集,请取消选中“所有处理器”并根据需要选择 CPU。服务运行时,可以从 Windows 任务管理器更改进程优先级和亲缘关系。
命令行形式
nssm set test AppPriority NORMAL_PRIORITY_CLASS
nssm set test AppNoConsole 0
nssm set test AppAffinity All
Shutdown
列出了在崩溃后或服务正常停止时整理应用程序时使用的各种停止方法和超时时长。
命令行形式
nssm set test AppStopMethodSkip 0
nssm set test AppStopMethodConsole 1500
nssm set test AppStopMethodWindow 1500
nssm set test AppStopMethodThreads 1500
exit actions
可用于调整服务退出时的 重启限制和默认 操作。您还可以指定 应用程序自动重新启动之间的强制延迟。要为特定应用程序退出代码配置退出操作,您必须使用注册表,如下所述。
命令行形式
nssm set test AppThrottle 1500
nssm set test AppExit Default Restart
nssm set test AppRestartDelay 0
I/O
指定日志输出位置
命令行形式
nssm set test AppStdout C:\games\ut2003\service.log
nssm set test AppStderr C:\games\ut2003\service.log
file rotation
日志切割,文件轮换选项卡可与 I/O设置结合使用,以在服务重新启动时配置输出文件的轮换。
- Replace existing Output and/or Error files: 启动服务时覆盖现有日志文件
- Rotate files: 重命名现有文件
- X seconds: 多长时间切割一次
- X bytes: 多大文件切割一次
- Rotate while service is running checkbox: 默认情况下,nssm仅在服务(重新)启动时执行文件切割。要在服务运行时启用旋转到指定大小限制的文件,请选中在服务运行时旋转复选框。在线轮换忽略时间配置.
在线轮换需要nssm拦截应用程序的输出并自行写入文件。复杂性的增加必然导致失败的风险增加。
命令行形式
nssm set test AppStdoutCreationDisposition 4
nssm set test AppStderrCreationDisposition 4
nssm set test AppRotateFiles 1
nssm set test AppRotateOnline 0
nssm set test AppRotateSeconds 86400
nssm set test AppRotateBytes 1048576
Environment
用于指定以换行符分隔的环境变量列表以传递给应用程序。如果选中替换默认环境复选框,则指定的变量将是唯一传递给服务的变量。未选中时(默认),将保留服务启动时创建的环境。
命令行形式
nssm set test AppEnvironmentExtra JAVA_HOME=C:\java
2.卸载服务
PS E:\> .\nssm.exe remove test
Administrator access is needed to remove a service.
3.其他
PS E:\> .\nssm.exe
NSSM: The non-sucking service manager
Version 2.24 64-bit, 2014-08-31
Usage: nssm <option> [<args> ...]
To show service installation GUI:
nssm install [<servicename>]
To install a service without confirmation:
nssm install <servicename> <app> [<args> ...]
To show service editing GUI:
nssm edit <servicename>
To retrieve or edit service parameters directly:
nssm get <servicename> <parameter> [<subparameter>]
nssm set <servicename> <parameter> [<subparameter>] <value>
nssm reset <servicename> <parameter> [<subparameter>]
To show service removal GUI:
nssm remove [<servicename>]
To remove a service without confirmation:
nssm remove <servicename> confirm
To manage a service:
nssm start <servicename>
nssm stop <servicename>
nssm restart <servicename>
nssm status <servicename>
nssm rotate <servicename>