首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSSM未启动简单服务

NSSM未启动简单服务
EN

Stack Overflow用户
提问于 2014-09-30 21:55:55
回答 1查看 9.8K关注 0票数 1

我在一个windows批处理文件中有以下内容,我想在启动时执行,所以我使用NSSM创建了一个服务。

代码语言:javascript
复制
start /min cmd /k
mongod --dbpath "D:\weather_station\weather_data" --repair
mongod --dbpath "D:\weather_station\weather_data"

我这样做是为了启动nodejs应用程序的mongodb服务器。

我得到一个错误:

代码语言:javascript
复制
Unexpected status SERVICE_PAUSED in response to START control

而在用于I/O重定向的文件(nssm日志)中,我得到了“不能识别为内部或外部命令、可操作程序或批处理文件”的信息。

现在这个脚本运行得很好,如果我直接从windows执行它的话,而且mongod已经安装好了,并且运行良好。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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.exemongod解释为可执行文件的名称。

但是这个可执行文件的文件名没有文件扩展名,也没有路径。所以cmd.exe必须搜索可执行文件。

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

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

由于没有文件路径,cmd.exe将首先在当前工作目录中搜索mongod.commongod.exe或...接下来,在环境变量PATH中指定的所有目录中,使用分号分隔。

PATH包含目录列表。但并不是只有一条路径。当前用户帐户有system PATHPATH,单击按钮打开查看和更改环境变量的对话框后,可以在Advanced system settings in Windows Control Panel中看到该帐户。

所有应用程序使用的路径是system PATH和used user account PATH的组合。

您将看到错误消息

代码语言:javascript
复制
'mongod' is not recognized as an internal or external command, operable program or batch file

因为包含mongod.exe的目录在您的用户帐号的user PATH中列出,或者在您手动运行批处理文件时在当前工作目录中找到。但mongod.exe未在用于将此批处理文件作为服务运行的帐户的system PATHPATH中指定。而将批处理文件作为服务执行的工作目录也是不同的,如果在批处理文件中只指定了Windows的标准应用程序,而没有指定文件扩展名和文件路径,则通常使用C:\Windows\System32来获取工作批处理文件。

因此,解决方案非常简单:

指定带有完整路径的mongod.exe,如果路径包含一个或多个空格,请用双引号将其引起来。

代码语言:javascript
复制
"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本身也不会启动单独的进程,然后在该单独的进程结束前立即终止,则不需要其他任何东西。包含这两行代码的批处理文件就是您所需要的。

否则,您可能需要:

代码语言:javascript
复制
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的文章。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26122675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档