windows下使用NSSM將exe封裝爲服務

背景

SC.exe 爲Windows系統自帶工具,可對Windows系統服務進行創建,查詢,啓動,停止,刪除等操作。
我之前用過SC來啓動golang程序和nginx程序,但是報1053的錯。
因爲sc.exe 只支持操作服務控制管理器(SCM)接口規範的系統服務. 一般的網絡服務進程如shadowsocks, nginx 等無法作爲服務直接啓動,需要用到接下來提到的服務封裝器,網上查找了下發現這個NSSM這個強大的服務封裝程序。

NSSM介紹

NSSM是一個服務封裝程序,它可以將普通exe程序封裝成服務,使之像windows服務一樣運行。同類型的工具還有微軟自己的srvany,不過nssm更加簡單易用,並且功能強大。


它的特點如下:

  • 支持普通exe程序(控制檯程序或者帶界面的Windows程序都可以)
  • 安裝簡單,修改方便
  • 可以重定向輸出(並且支持Rotation)
  • 可以自動守護封裝了的服務,程序掛掉了後可以自動重啓
  • 可以自定義環境變量
  • 這裏面的每一個功能都非常實用,使用NSSM來封裝服務可以大大簡化我們的開發流程了。

開發的時候是一個普通程序,降低了開發難度,調試起來非常方便
安裝簡單,並且可以隨時修改服務屬性,更新也更加方便
可以利用控制檯輸出直接實現一個簡單的日誌系統
不用考慮再加一個服務實現服務守護功能
我覺得它還可以需要增加的一個功能是將輸入輸出重定向爲一個tcp連接,這樣可以通過telnet的方式實現程序的交互了,那樣就更加好用了。

下面就簡單的介紹一下如何使用這個工具。

首先去nssm的官網(https://nssm.cc/ )下載

服務安裝:

服務安裝可以使用如下命令:

nssm install <servicename>

執行此命令後,會出現一個界面,基本上看着就知道怎麼用了,大多數情況下,只需要填第一個界面的程序路徑就可以了。
windows下使用NSSM將exe封裝爲服務

其它界面的是高級參數的配置,可以根據需要自行選擇。

參數填完後執行"install service"按鈕即可將服務安裝到系統,可以使用系統的服務管理工具查看了。

當然,如果要自動化安裝,可以直接帶上程序路徑: nssm install <servicename> <program> [<arguments>]

NSSM本身win7及以上的系統基本都是支持的,我測試過win7,2008,2016系統,都是沒有問題的,如果安裝失敗,請首先檢查是否裝了某國產管家或國產殺毒軟件。

安裝完成後,服務還沒有啓動,需要通過下面的服務管理的命令啓動服務。

服務管理:

服務管理主要有啓動、停止和重啓,其命令如下:

啓動服務: 

nssm start <servicename>

停止服務:

nssm stop <servicename>

重啓服務:

nssm restart <servicename>

當然,也可以使用系統自帶的服務管理器操作和使用系統的命令。

修改參數:

NSSM安裝的服務修改起來非常方便,命令如下:

nssm edit <servicename>

會自動啓動操作界面,直接更改即可。

服務刪除:

服務刪除可以使用如下命令之一:

nssm remove <servicename>
nssm remove <servicename> confirm

功能沒有大的區別,後面的命令是自動確認的,沒有交互界面。

命令行:

服務自動化需要使用更多的命令行,具體參看官方文檔: Managing services from the command line

如下是一個安裝Jenkins服務的示例:

nssm install Jenkins %PROGRAMFILES%\Java\jre7\bin\java.exe
nssm set Jenkins AppParameters -jar slave.jar -jnlpUrl https://jenkins/computer/%COMPUTERNAME%/slave-agent.jnlp -secret redacted
nssm set Jenkins AppDirectory C:\Jenkins
nssm set Jenkins AppStdout C:\Jenkins\jenkins.log
nssm set Jenkins AppStderr C:\Jenkins\jenkins.log
nssm set Jenkins AppStopMethodSkip 6
nssm set Jenkins AppStopMethodConsole 1000
nssm set Jenkins AppThrottle 5000
nssm start Jenkins

通過服務管理來字段啓動exe

爲了讓我們的程序開機自動開啓和失敗自動重啓。

① 運行窗口輸入services.msc。
② 找到相應的exe服務設置恢復的處理,如下圖:
windows下使用NSSM將exe封裝爲服務
windows下使用NSSM將exe封裝爲服務

其它教程:

這裏找了網上一些關於nssm的使用教程,感興趣的朋友可以參考一下:
https://gogs.io/docs/installation/run_as_windows_service
http://www.huangwenchao.com.cn/2016/10/windows-service-wrapper.html
http://keenwon.com/1289.html

轉載自:https://www.cnblogs.com/TianFang/p/7912648.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章