Run batch file as a Windows service
为了运行一个应用程序,必须启动一个批处理文件(它执行诸如启动Jetty、显示实时日志等操作)。只有当批处理文件正在运行时,应用程序才能工作。因此,我被迫运行此批处理文件,而不是从Windows服务器注销。
这个批处理文件可以作为服务运行吗?我正在试验一个类似问题的建议。
- 批量编程是堆栈交换的主题。
- 好问题。+ 1。主持人太生气了…我还有一个很好的答案,但问题已经解决了。((
- 我使用这个runasseservice:runasseservice.com。使用起来非常简单。没有XML配置废话。基本上,这只是为您提供runasservice.exe可执行文件,它使用命令行参数将任何控制台应用程序包装为服务。我使用它来运行cygwin bash脚本作为服务!!!!不幸的是,这个简单的工具似乎是封闭源代码的。
- 在"程序员常用的软件工具"的基础上重新开放。这个问题的答案肯定是。还要记住,这是谷歌搜索"Windows启动批处理文件作为服务"时的第一个结果,因此,无论是在狭隘的范围内,一些版主的事情都是"讨论主题",世界其他人都认为这是。我支持实用主义而不是教条主义。
- 在serverfault serverfault.com/questions/54676/…上可以找到类似的问题。
NSSM完全免费,超简单,以管理员身份运行命令提示/终端:
1
| nssm install"YourCoolServiceNameLabel" |
然后会出现一个对话框,您可以选择要运行的文件的位置。
卸载
1
| nssm remove"YourCoolServiceNameLabel" |
号
- +我从来没听说过这个,但很好。NSSM确实不烂!
- 哦,我的上帝!这个工具很棒!你救了我。谢谢。
- 我花了2分钟安装服务
- @小M谢谢!!你救了我。我为此花了4个小时。谢谢!!
- @publicravi,你能接受这个答案吗?.
- 我认为这应该是公认的答案:)
- 在我的示例中,我刚发出命令/nssm install servicea,但当我尝试从控制面板服务启动服务时,它被暂停,并出现错误"服务没有返回错误,这可能是窗口内部错误"我现在应该怎么办?
- 你知道是否有一种方法可以在输入端给nssm所有必要的参数以避免弹出数据输入——我正在尝试自动化这个过程?
- 在我们的一些客户中,NSSM一直被gdata antivirus删除。是的,我知道,白名单…但是顾客不会做对他们有利的事情。这是可悲的事实。
为什么不简单地将其设置为计划在启动时运行的计划任务?
- 我有许多批处理文件通过Robocopy进行备份,这些文件是通过在Win2003服务器上运行的计划任务(转到控制面板,计划任务)启动的。好好招待…
- 只是使用了一个监控备份服务的脚本。它就像一个魅力。
- 这是IMO的最佳解决方案。不需要第三方软件,也不需要命令行界面。另外,任务调度程序为触发器、条件等提供了许多选项。
- 现在我明白了这一点:当任务在启动时运行时(使用"无论用户是否登录都运行")%userprofile%是C:usersdefaultany other time它将是预期的C:usersexpected user his can create uncertimate failures for some.bat files that appear to work fine in other scheduled tasks.bat files.
- 可以将服务配置为在出现故障时自动重新启动以及其他关键的实际考虑事项。
- @我的批处理文件正在计划任务中运行,但不显示services.msc
- 使用"任务计划程序"->"创建任务"->"隐藏"。"隐藏"复选框位于左下角。将任务设置为在登录时触发(或您喜欢的任何条件),然后在"操作"选项卡中选择该任务。运行hidden可以确保任务像服务一样运行,即,不在前台运行。
- 计划任务是出了名的不可靠——事实上我遇到了这个问题,因为我遇到了所有的问题,任务没有按时启动,没有明显的原因。
有一个内置的windows命令来做这个:sc-create。没有NSSM那么花哨,但是你不需要下载额外的软件。
1
| sc create"ServiceName" start= demand displayname="DisplayName" binpath= [path to .bat file] |
注释
- 开始=需求意味着您必须自己启动服务
- =后需要空白
- 我确实在服务启动时遇到了一个错误,服务没有及时响应,但很明显服务已经成功运行了.bat。还没有深入研究这个问题,但是这个线程经历了同样的事情,并使用NSSM安装服务解决了这个问题。
- Windows似乎没有将.bat文件作为服务运行。
- @帕金斯-我昨天在几台机器上工作。你是否经历过一些特殊的事情?我确实遇到了一个错误,即服务在启动时没有及时响应它,但是.bat文件将启动kibana node.js服务器,即使出现错误,它也在成功运行。在这方面的人似乎经历了同样的事情,但没有与NSSM。stackoverflow.com/a/40130630/885535
- 在我的例子中,批处理文件应该创建的文件没有被创建,程序也没有运行,所以我必须假设它没有启动。我通过创建运行cmd.exe/c的服务来解决这个问题。请注意,我使用的是Windows10,所以这可能是一些新的"安全"功能。
- @Perkins我刚在Win10 1803上运行,没问题,启动node.js服务器。当从cmd或powershell调用时,BAT文件是否创建文件并运行服务?当你开始服务的时候,你会收到任何消息框吗?您的服务对这些目录有权限吗?通过写入本地日志文件,可以在BAT中添加一些错误日志记录,看看是否有效。
- 好吧,如果它肯定能起作用的话,我会在某个时候再看一看。目前,通过cmd过滤它似乎是有效的,我真的不想触摸它,直到它的关键需要完成。谢谢你的帮助!
- GET"错误1053:服务没有及时响应启动或控制请求。"
- @Alexklaus如果你读到我的第三个要点,我经历了类似的事情,但是服务仍然开始了。使用NSSM解决链接问题
- nssm解决方案肯定对我有用。
虽然它不是免费的(但39美元),但FireDaemon对我来说工作得很好,我不得不推荐它。它将运行您的批处理文件,但具有许多附加的非常有用的功能,例如调度、服务启动监视、基于GUI或XML的服务安装、依赖项、环境变量和日志管理。
我开始使用FireDaemon启动JBoss应用程序服务器(run.bat),但不久之后我意识到FireDaemon配置功能的丰富性允许我放弃批处理文件,并在FireDaemon服务定义中重新创建其命令的意图。
还有一个名为Trinity的超级FireDaemon,如果您有大量的Windows服务器来管理此服务(或者从技术上讲,任何服务),那么您可能需要查看它。
正如Doug Currie所说,使用runasseservice。
根据我过去的经验,您必须记住,您生成的服务将
- 有一组完全不同的环境变量
- 必须仔细检查权限问题
- 如果它打开要求任何类型输入的对话框,可能会导致混乱
不确定最后一个是否仍然适用…那是我前一段时间工作的一个项目中的一个重要夜晚。
不需要额外的软件。使用"任务计划程序"->"创建任务"->"隐藏"。"隐藏"复选框位于左下角。将任务设置为在登录时触发(或您喜欢的任何条件),然后在"操作"选项卡中选择该任务。运行hidden可以确保任务像服务一样在后台静默运行。
请注意,您还必须将程序设置为"无论用户是否登录",否则程序仍将在前台运行。
Alwaysupp可以很容易地将批处理文件作为服务运行。它类似于FireDaemon(上面提到的),并且不是免费的,但是您可能会发现在专业环境中丰富的功能集是一种资产。
祝你好运!