为了运行一个应用程序,必须启动一个批处理文件(执行启动 Jetty、显示实时日志等操作)。仅当此批处理文件正在运行时,该应用程序才能工作。因此,我被迫运行此批处理文件,而不是从 Windows 服务器注销。
这个批处理文件可以作为服务运行吗?我正在试验来自 similar question 的建议之一。
NSSM 完全免费且超级简单,以管理员身份运行命令提示符/终端:
nssm install "YourCoolServiceNameLabel"
然后会出现一个对话框,您可以选择要运行的文件在哪里。
卸载
nssm remove "YourCoolServiceNameLabel"
为什么不简单地将其设置为计划在启动时运行的计划任务?
有一个内置的 Windows cmd 可以执行此操作:sc create。不像nssm那么花哨,但您不必下载额外的软件。
sc create "ServiceName" start= demand displayname= "DisplayName" binpath= [path to .bat file]
笔记
start=demand 意味着您必须自己启动服务。选项包括:引导、系统、自动、需求、禁用、延迟自动
之后需要空格
我确实在服务启动时遇到了服务没有及时响应的错误,但很明显服务已经成功运行了.bat。还没有深入研究这个,但是这个线程遇到了同样的事情并使用 nssm 安装服务解决了它。
在 Windows 2019 Server 上,您可以使用以下命令运行 Minecraft java 服务器:
sc create minecraft-server DisplayName= "minecraft-server" binpath= "cmd.exe /CC:\Users\Administrator\Desktop\rungui1151.lnk" type= own start= auto
.lnk 文件是批处理文件的标准 Windows 快捷方式。
--- .bat 文件开始 ---
java -Xmx40960M -Xms40960M -d64 -jar minecraft_server.1.15.1.jar
--- .bat 文件结束 ---
这一切都是因为:
服务不知道如何在文件夹中启动,
cmd.exe 不知道如何在文件夹中启动
启动服务会产生“及时”错误,但日志文件显示服务器正在运行。
如果你需要关闭服务器,进入任务管理器,在后台进程中找到服务器java并结束它,或者在游戏中使用/stop命令终止服务器,或者对于其他程序/服务器,使用方法与服务器相关。
无需额外的软件。使用任务调度器 -> 创建任务 -> 隐藏。隐藏的复选框位于左下角。将任务设置为在登录时触发(或您喜欢的任何条件),然后在操作选项卡中选择任务。隐藏运行可确保任务像服务一样在后台静默运行。
请注意,您还必须将程序设置为“无论用户是否登录”都运行,否则程序仍将在前台运行。
正如 Doug Currie 所说,使用 RunAsService。
根据我过去的经验,您必须记住,您生成的服务将
有一组完全不同的环境变量
必须仔细检查权限/权限问题
如果它打开询问任何类型输入的对话框,可能会造成严重破坏
不确定最后一个是否仍然适用……这是我前段时间从事的一个项目中的一个大噩梦。
虽然它不是免费的(但 39 美元),但 FireDaemon 对我来说效果很好,我不得不推荐它。它将运行您的批处理文件,但具有许多额外且非常有用的功能,例如调度、服务监控、基于 GUI 或 XML 的服务安装、依赖项、环境变量和日志管理。
我开始使用 FireDaemon 来启动 JBoss 应用程序服务器 (run.bat),但不久之后我意识到 FireDaemon 配置能力的丰富性使我可以放弃批处理文件并在 FireDaemon 服务定义中重新创建其命令的意图。
还有一个名为 Trinity 的 SUPER FireDaemon,如果您有大量 Windows 服务器来管理此服务(或从技术上讲,任何服务),您可能想要查看它。
由于 NSSM 不再维护,您可以考虑使用 WinSW。它有可以使用或不使用 .Net 的二进制文件。
基本上,您创建一个 XML 文件,然后安装它。这是一个最小 XML 的示例:
<service>
<!-- ID of the service. It should be unique across the Windows system-->
<id>myapp</id>
<!-- Path to the executable, which should be started -->
<!-- CAUTION: Don't put arguments here. Use <arguments> instead. -->
<executable>%BASE%\myExecutable.exe</executable>
</service>
然后你可以安装并启动它:
winsw install myapp.xml
winsw start myapp.xml
安装 NSSM 并将 .bat 文件作为 Windows 服务运行。按预期工作
nssm
所有必要的参数以避免弹出数据输入 - 我正在尝试自动化这个过程?