我在Windows批处理文件中有一个要在启动时执行的文件,因此我已经使用NSSM创建了服务。
start /min cmd /k
mongod --dbpath "D:\weather_station\weather_data" --repair
mongod --dbpath "D:\weather_station\weather_data"
我这样做是为了为我的nodejs应用程序启动mongodb服务器。
我收到一个错误:
Unexpected status SERVICE_PAUSED in response to START control
并且在用于I / O重定向的文件(nssm日志)中,我得到“无法将'mongod'识别为内部或外部命令,可操作程序或批处理文件”。
现在,如果我直接从Windows执行此脚本,该脚本可以正常运行,并且mongod已安装并且可以正常运行。
我不知道,为什么nssm不会打开新的命令提示符并执行此服务。
这是将mongodb服务器作为Windows服务启动的最佳方法吗?
最佳答案
在我看来,start /min cmd /k
的第一行完全没有用。去掉它。
批处理文件由环境变量ComSpec中定义的应用程序执行。 ComSpec通常具有值C:\Windows\System32\cmd.exe
。现在,命令start
是cmd.exe
的内部命令,用于作为独立进程启动应用程序。
您可以使用start
来启动另一个cmd.exe
,并且可以选择使最小化窗口保持打开状态,即使在此命令行过程启动的所有应用程序完成之后。因此,您从第一行获得的就是一个新的最小化的命令提示符窗口,除了等待用户输入外,什么也没有做。
用于执行批处理文件中命令的cmd.exe
会立即继续解析以mongod
开头的第二个命令行。mongod
不是cmd.exe
的内部命令。因此,mongod
被cmd.exe
解释为可执行文件的名称。
但是该可执行文件的文件名没有文件扩展名和路径。因此,cmd.exe
必须搜索可执行文件。
环境变量PATHEXT包含文件扩展名列表,这些文件扩展名由可执行文件的分号分隔。此列表现在用于查找mongod.com
或mongod.exe
或mongod.bat
或mongod.cmd
,...
因此,我对您的第一个建议是:指定带有文件扩展名的mongod
,即mongod.exe
由于没有文件路径,因此cmd.exe
首先在当前工作目录中搜索mongod.com
或mongod.exe
或...,然后在由分号分隔的环境变量PATH中指定的所有目录中搜索。
PATH包含目录列表。但是,不仅只有一个路径。在单击按钮以打开用于查看和更改环境变量的对话框后,可以在Advanced system settings in Windows Control Panel中看到当前用户帐户的系统PATH和PATH。
所有应用程序使用的PATH是系统PATH和使用的用户帐户PATH的组合。
您收到错误信息
'mongod' is not recognized as an internal or external command, operable program or batch file
因为包含
mongod.exe
的目录要么在用户帐户的用户PATH中列出,要么在您手动运行批处理文件时在当前工作目录中找到。但是在系统PATH或用于将此批处理文件作为服务运行的帐户的PATH中都未指定mongod.exe
。与批处理文件作为服务执行时的工作目录也不同,如果在批处理文件中仅指定Windows的标准应用程序而没有文件扩展名和文件路径,则通常使用C:\Windows\System32
来获取工作批处理文件。因此,解决方案非常简单:
用完整路径指定
mongod.exe
,如果路径包含一个或多个空格,请用双引号指定。"C:\Program Files (x86)\whatever\mongod.exe" --dbpath "D:\weather_station\weather_data" --repair
"C:\Program Files (x86)\whatever\mongod.exe" --dbpath "D:\weather_station\weather_data"
如果
mongod
是控制台应用程序而不是GUI应用程序,并且mongod
本身也不会启动单独的进程,然后在此单独的进程完成之前立即终止,则您不需要任何其他操作。只需要这两行的批处理文件。否则,您可能需要:
start "Repair Data" /min /wait "C:\Program Files (x86)\whatever\mongod.exe" --dbpath "D:\weather_station\weather_data" --repair
start "..." /min /wait "C:\Program Files (x86)\whatever\mongod.exe" --dbpath "D:\weather_station\weather_data"
如需有关命令
start
的帮助,请在命令提示符窗口help start
或start /?
中输入。作为编写批处理文件的初学者,请阅读有关Windows Commands的Microsoft文章。
关于node.js - NSSM无法启动简单服务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26122675/