我想创建一个nodejs服务,以便节点服务器在计算机启动时启动,而我不必一直保持命令提示符打开。我正在尝试通过使用NSSM来实现这一目标。
这是创建服务的命令:
nssm.exe install jewel-server C:\Program Files\nodejs\node.exe D:\jewel\server.js
Run Code Online (Sandbox Code Playgroud)
运行服务:
net start jewel-server
Run Code Online (Sandbox Code Playgroud)
但这不起作用并给出此错误:
The jewel-server service is starting.
The jewel-server service could not be started.
A service specific error occured: 3.
Run Code Online (Sandbox Code Playgroud)
我检查了错误代码3,表示路径不正确,但路径正确。您能告诉我我做错了什么吗,还是有其他开源和更可靠的替代品NSSM
版:
NSSM
version: 2.24
Windows-7 64bit
Run Code Online (Sandbox Code Playgroud) 我有一个可执行.jar文件,我想作为一个Window服务运行,以便即使我退出也能保持执行.我搜索并发现了NSSM.但是,在完成配置后,当我开始服务时,它停止并打印Unexpected status SERVICE-STOPPED in response to start control.我刚才说我path并startup directory在Application标签上,没有别的.此外,我无法找到任何nssm可能创建的日志文件来检查实际发生了什么.
我本来应该将 GoLang 编译的文件 .exe 转换为 Windows 中的服务,但由于该服务是使用外部的 9 个参数执行的,所以我决定使用 SC 将 .exe 制作为服务,我的语法是,
sc create myservice binPath= "\"PATH\file.exe\" -param1=value -param2=value -param3=value...-param9=value" displayname= "MyServer" start= auto
Run Code Online (Sandbox Code Playgroud)
服务创建成功,但当我尝试启动它时,它失败并显示“服务未及时响应”。
但是当我使用 nssm 语法创建相同的服务时,
nssm install myservice "PATH\file.exe" -param1=value -param2=value -param3=value...-param9=value
Run Code Online (Sandbox Code Playgroud)
它正在工作,我正在从我的服务中得到响应,我不知道问题是出在 SC 中的语法还是我的服务中......
我什至尝试了许多可能的方法,例如删除 \" 并直接给出参数binPath= "PATH/file.exe -param1=value -param2=value...param9=value"
,但它不起作用,我也尝试在引号内传递参数,它也不起作用:(任何帮助将不胜感激。
program files我想在使用 Inno Setup 安装程序时允许带有空格的路径(例如)。但是,带有空格的路径会让我安装的服务崩溃。
Inno 安装文件如下所示:
[Setup]
AppName=Demo
DefaultDirName={pf}\demo
[Files]
Source: "bin\nssm.exe"; DestDir: "{app}"
Source: "bin\jdk1.8.0_152\jre\*"; DestDir: "{app}\jre"; Flags: recursesubdirs
Source: "build\libs\demo.jar"; DestDir: "{app}"
[Run]
Filename: "{app}\nssm.exe"; \
Parameters: "install demo ""{app}\jre\bin\java.exe"" -jar ""{app}\demo.jar"""
Filename: "{app}\nssm.exe"; Parameters: "start demo"
Run Code Online (Sandbox Code Playgroud)
“nssm.exe”是一个服务包装器,用于将 java 应用程序作为 Windows 服务执行。
关键部分是这一行:
Filename: "{app}\nssm.exe"; \
Parameters: "install demo ""{app}\jre\bin\java.exe"" -jar ""{app}\demo.jar"""
Run Code Online (Sandbox Code Playgroud)
正如这个问题/答案中所建议的,我尝试使用双引号,但这没有帮助,服务仍然崩溃。如果我更改DefaultDirName为没有空格的路径,一切都会按预期进行。
DefaultDirName=c:\demo
Run Code Online (Sandbox Code Playgroud)
我该如何处理带有空格的路径?
我正在尝试构建一种自包含系统,我将应用程序可执行文件复制到一个位置,并将服务作为独立应用程序运行,无需安装.我使用NSSM可执行文件在Windows Server 2012 R2和一台机器上创建服务,将会有很多可部署的.我的问题是,虽然自动化与Ansible部署,我被困在那里我需要知道,如果给定的服务名已经存在,如果是,什么是它的状态呢?在NSSM中似乎没有任何API来检查它.如果服务存在,如何通过命令行询问NSSM?我可以通过命令行检查服务的存在和状态(没有powershell)吗?
我正在尝试制作一个批处理文件,该文件将创建我的服务,并为如何准确列出每个参数而苦苦挣扎。我对此进行了大量研究,但似乎找不到正确的语法。这就是我现在所拥有的:
nssm install MDHIS_WebClient "%MDHIS2_HOME%/MDHIS_WebClient.cmd" AppDirectory %MDHIS2_HOME% DisplayName MDHIS_WebClient Start SERVICE_AUTO_START DependOnService MSSQLSERVER AppNoConsole 1 AppStopMethodConsole 30000
Run Code Online (Sandbox Code Playgroud)
这有效,但参数被忽略。任何人都可以向我展示正确语法的示例吗?
nssm ×6
windows ×3
service ×2
arguments ×1
cmd ×1
command-line ×1
inno-setup ×1
node.js ×1
window ×1