我在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。现在,命令startcmd.exe的内部命令,用于作为独立进程启动应用程序。

您可以使用start来启动另一个cmd.exe,并且可以选择使最小化窗口保持打开状态,即使在此命令行过程启动的所有应用程序完成之后。因此,您从第一行获得的就是一个新的最小化的命令提示符窗口,除了等待用户输入外,什么也没有做。

用于执行批处理文件中命令的cmd.exe会立即继续解析以mongod开头的第二个命令行。

mongod不是cmd.exe的内部命令。因此,mongodcmd.exe解释为可执行文件的名称。

但是该可执行文件的文件名没有文件扩展名和路径。因此,cmd.exe必须搜索可执行文件。

环境变量PATHEXT包含文件扩展名列表,这些文件扩展名由可执行文件的分号分隔。此列表现在用于查找mongod.commongod.exemongod.batmongod.cmd,...

因此,我对您的第一个建议是:指定带有文件扩展名的mongod,即mongod.exe

由于没有文件路径,因此cmd.exe首先在当前工作目录中搜索mongod.commongod.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 startstart /?中输入。

作为编写批处理文件的初学者,请阅读有关Windows Commands的Microsoft文章。

关于node.js - NSSM无法启动简单服务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26122675/

10-16 19:41