NSSM不开始一项简单的服务

我有一个Windowsbatch file,我想在启动时执行,所以我已经使用NSSM创build一个服务。

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 / Oredirect的文件(nssm日志)中,我得到''mongod'不被识别为内部或外部命令,可操作程序或batch file。

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

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

这是启动mongodb服务器作为Windows服务的最好方法吗?

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

batch file由环境variablesComSpec中定义的应用程序执行。 ComSpec通常具有值C:\Windows\System32\cmd.exe 。 该命令的start是(现今) cmd.exe一个内部命令来启动一个应用程序作为一个单独的进程。

您可以使用start来启动另一个cmd.exe ,即使在此命令行进程启动的所有应用程序完成之后仍然保持最小化窗口打开的选项。 因此,第一行的所有内容都是一个新的最小化的命令提示符窗口,而不是等待用户input。

用于执行batch file中的命令的cmd.exe继续立即parsing以mongod开头的第二个命令行。

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

但是这个可执行文件的文件名没有文件扩展名,也没有path。 所以cmd.exe必须search一个可执行文件。

环境variablesPATHEXT包含用分号分隔的可执行文件的文件扩展名列表。 此列performance在用于查找mongod.commongod.exemongod.batmongod.cmd ,…

所以我的第一个build议是:指定mongod文件扩展名,即mongod.exe

由于没有文件path,因此cmd.exe首先在当前工作目录中searchmongod.commongod.exe或…,然后在由环境variablesPATH指定的所有目录中以分号分隔。

PATH包含一个目录列表。 但是不仅有一个PATH 。 当前用户帐户有系统PATHPATH ,因为可以在Windows控制面板的高级系统设置中看到,点击button打开对话框以查看和更改环境variables。

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

您收到错误消息

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

因为包含mongod.exe的目录是在您的用户帐户的用户PATH中列出的,或者可以在您手动运行batch file的当前工作目录中find。 但是在系统PATH中没有指定mongod.exe也没有在用于将该batch file作为服务运行的帐户的PATH 。 如果在没有文件扩展名和文件path的batch file中指定了Windows的标准应用程序,那么batch file作为服务执行的工作目录也是不同的,通常是C:\Windows\System32来获得工作batch file。

因此解决scheme非常简单:

如果path包含一个或多个空格,请使用完整path指定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本身也不启动一个单独的进程,然后在这个单独的进程完成之前立即终止,则不需要其他任何东西。 这2行的batch file是你所需要的。

否则,你可能需要:

 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" 

有关命令的帮助,请在命令提示符窗口中inputhelp startstart /?

作为编写batch file的初学者,请参阅 Microsoft文章命令行概述 。