2014-09-30 41 views
1

我在Windows批处理文件中有以下内容,我希望在启动时执行此操作,所以我使用NSSM创建了一项服务。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’不被识别为一个内部或外部的命令,运行程序或批处理文件。”

现在这个脚本运行良好,如果我直接从窗口执行它,并且安装mongod并且工作正常。

我不知道,为什么nssm不会打开新的命令提示符并执行此服务。

这是将mongodb服务器作为Windows服务启动的最佳方式吗?

回答

1

start /min cmd /k的第一行在我看来完全没用。去掉它。

批处理文件由环境变量ComSpec中定义的应用程序执行。 ComSpec通常值C:\Windows\System32\cmd.exe。命令start是(现今)的内部命令cmd.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

您收到错误消息

'mongod' is not recognized as an internal or external command, operable program or batch file 

含有mongod.exe目录要么在用户列出您的用户帐户的PATH,或可在当前工作目录上运行的批处理文件是由您手动发现。但mongod.exe没有在系统指定的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是一个控制台应用程序,而不是一个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 /?进入。

正如书面批处理文件初学者挑战微软的文章command shell overview看看。