多年來,每當我需要將應用程式作為 Windows 服務執行時,我都會使用 sc.exe 或 NSSM。它們雖然能用,但都存在一些限制,在實際專案中會變得很痛苦:
sc.exe始終預設將 C:\Windows\System32 作為工作目錄,這會破壞依賴相對路徑或本機配置的應用程式。
NSSM重量輕,但缺乏監控、日誌輪換,並且只有最少的 UI。
WinSW是可配置的,但基於 XML,並且對於快速設定來說不太方便。
在多次遇到這些問題之後,我決定建立自己的工具:Servy。
目標
我想要的解決方案是:
易於使用,具有簡潔的使用者介面,還可以透過 CLI 編寫腳本實現自動化。
足夠靈活,可以執行任何應用程式(Node.js、Python、.NET、腳本等)。
內建日誌記錄、健康檢查、恢復和重啟策略,功能強大。
相容於多種 Windows 版本(從 Windows 7 到 11,以及伺服器版本)。
一路上的挑戰
工作目錄處理:確保服務使用正確的啟動資料夾執行,不受駭客攻擊。
日誌管理:將 stdout/stderr 重新導向到文件,但進行輪換以避免無限增長。
健康監測:新增檢查,以便服務在出現問題時可以自動重新啟動或恢復。
UI 設計:平衡簡單性(適合休閒使用)和進階選項(適合專業人士)。
結果
Servy就是為此而生的。它是一款開源工具,可將任何應用程式轉換為原生 Windows 服務,並結合現代 GUI 和 CLI 實現自動化。 Servy 的設計初衷是既易於使用,又功能強大,足以滿足生產環境的需求。
GitHub: github.com/aelassas/servy
{% 嵌入 https://www.youtube.com/watch?v=biHq17j4RbI
%}安裝 Servy 有兩種方式:手動下載並安裝,或使用 WinGet 或 Chocolatey 等套件管理器。
確保您已安裝WinGet或Chocolatey 。
從命令提示字元或 PowerShell 以管理員身分執行以下命令之一:
溫蓋特
winget install servy
巧克力口味
choco install -y servy
乾淨、簡單的使用者介面
使用 Servy Manager 快速監控並管理所有已安裝的服務
用於完整腳本和自動化部署的 CLI
將任何可執行檔作為 Windows 服務執行
設定服務名稱、描述、啟動類型、優先權、工作目錄、環境變數、依賴項和參數
環境變數和流程參數均支援環境變數擴展
以本機系統、本機使用者或網域帳戶執行服務
將 stdout/stderr 重新導向到具有基於大小的自動輪換的日誌文件
在啟動服務之前執行預啟動腳本,包括重試、逾時、日誌記錄和故障處理
透過改進的生命週期管理和確保資源清理來防止孤立/殭屍進程
健康檢查和自動服務恢復
即時監控和管理服務
按等級、日期和關鍵字瀏覽和搜尋日誌,以便更快地從 Servy Manager 進行故障排除
匯出/導入服務配置
透過 Windows 通知和電子郵件發出服務事件通知警報
與 Windows 7–11 x64 和 Windows Server 版本相容
Servy 完全開源,我們歡迎各種貢獻!無論是修復錯誤、加入新功能、改進文件,還是分享創意,您的幫助都能讓 Servy 變得更好,造福所有人。
您可以透過以下方式做出貢獻:
在GitHub上提交拉取請求
開啟問題報告錯誤或請求功能
參與討論並提供回饋
每一份貢獻都很重要-幫助我們讓執行 Windows 服務變得更簡單、更可靠、更愉快!
原文出處:https://dev.to/aelassas/why-i-built-servy-a-modern-open-source-alternative-to-nssmwinsw-kbm