簡體   English   中英

將批處理文件作為 Windows 服務運行

[英]Run batch file as a Windows service

為了運行一個應用程序,必須啟動一個批處理文件(執行啟動 Jetty、顯示實時日志等操作)。 僅當此批處理文件正在運行時,該應用程序才能工作。 因此,我被迫運行此批處理文件,而不是從 Windows 服務器注銷。

這個批處理文件可以作為服務運行嗎? 我正在嘗試來自類似問題的建議之一。

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 服務運行。 按預期工作

AlwaysUp可以輕松地將批處理文件作為服務運行。 它類似於FireDaemon(如上所述)並且不是免費的,但您可能會發現豐富的功能集在專業環境中是一種資產。

祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM