我在一个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日志)中,我得到了“不能识别为内部或外部命令、可操作程序或批处理文件”的信息。
现在这个脚本运行得很好,如果我直接从windows执行它的话,而且mongod已经安装好了,并且运行良好。
我不知道,为什么nssm不打开一个新的命令提示符并执行此服务。
这是将mongodb服务器作为windows服务启动的最佳方式吗?
发布于 2014-10-04 01:43:46
在我看来,start /min cmd /k的第一行是完全无用的。去掉它。
批处理文件由环境变量ComSpec中定义的应用程序执行。ComSpec的值通常为C:\Windows\System32\cmd.exe。命令start (现在)是cmd.exe的内部命令,用于将应用程序作为单独的进程启动。
您可以使用start启动另一个cmd.exe,并选择在此命令行进程启动的所有应用程序完成后保持最小化窗口的打开状态。因此,第一行得到的是一个新的最小化的命令提示符窗口,除了等待用户输入之外,什么也不做。
用于执行批处理文件中的命令的cmd.exe将立即继续解析以mongod开头的第二个命令行。
mongod不是cmd.exe的内部命令。因此,cmd.exe将mongod解释为可执行文件的名称。
但是这个可执行文件的文件名没有文件扩展名,也没有路径。所以cmd.exe必须搜索可执行文件。
环境变量PATHEXT包含可执行文件的文件扩展名列表,这些文件扩展名之间用分号分隔。此列表现在用于查找mongod.com、mongod.exe、mongod.bat或mongod.cmd,...
因此,我对您的第一个建议是:指定带有文件扩展名的mongod,即mongod.exe
由于没有文件路径,cmd.exe将首先在当前工作目录中搜索mongod.com或mongod.exe或...接下来,在环境变量PATH中指定的所有目录中,使用分号分隔。
PATH包含目录列表。但并不是只有一条路径。当前用户帐户有system PATH和PATH,单击按钮打开查看和更改环境变量的对话框后,可以在Advanced system settings in Windows Control Panel中看到该帐户。
所有应用程序使用的路径是system PATH和used user account PATH的组合。
您将看到错误消息
'mongod' is not recognized as an internal or external command, operable program or batch file因为包含mongod.exe的目录在您的用户帐号的user PATH中列出,或者在您手动运行批处理文件时在当前工作目录中找到。但mongod.exe未在用于将此批处理文件作为服务运行的帐户的system PATH或PATH中指定。而将批处理文件作为服务执行的工作目录也是不同的,如果在批处理文件中只指定了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是控制台应用程序,而不是图形用户界面应用程序,并且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的文章。
https://stackoverflow.com/questions/26122675
复制相似问题