NSSM没有开始简单的服务

时间:2014-09-30 13:55:55

标签: node.js mongodb batch-file windows-services

我在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服务启动的最佳方式吗?

1 个答案:

答案 0 :(得分: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 包含目录列表。但是,不仅有一个 PATH 。当前用户帐户有系统路径路径,因为在点击按钮打开对话框查看和更改后,可以在advanced system settings in Windows control panel中看到它环境变量。

所有应用程序使用的路径是系统路径和使用的用户帐户路径的组合。

您收到错误消息

'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 /?中输入。

作为编写批处理文件的初学者,请查看Microsoft文章command shell overview