.NET 項目的前後端部署,網上有不少,大部分基於NSSM來部署的
這個方法並沒有問題,非常好用.但是很多都是需要 彈窗設置的.並沒有詳細的講解批處理的命令方式.
在參考了相關博客後,寫一個簡單的教程案例,僅供參考
環境:
Ngnix(非必須,如果純後端可以忽略)
NSSM
關於mssm的下載,傳送門: http://www.nssm.cc/download
該前後端項目基於ZRAdmin.net,所有教程以ZRAdmin.NET爲準
複製mssn 到nginx根目錄,web項目放在了html目錄下
相關批處理命令
WEB後端
ECHO ON CLS ECHO "******************************************************" ECHO "*******api項目安裝, 請確認以管理員身份運行,按任意鍵繼續*****" ECHO "******************************************************" cd /d %~dp0 :: nssm install rq_webapi "%PROGRAMFILES%\html\zradmin\api" nssm install rq_webapi "%PROGRAMFILES%\dotnet\dotnet.exe" nssm set xx_webapi AppDirectory "%cd%\html\zradmin\api" nssm set xx_webapi AppParameters "ZR.Admin.WebApi.dll" nssm set xx_webapi Description "XXXwebAPI服務..." nssm start rq_webapi echo 當前路徑爲 %cd% pause
前端
ECHO ON CLS ECHO "******************************************************" ECHO "****Nginx服務安裝...請確認以管理員身份運行,按任意鍵繼續*****" ECHO "******************************************************" echo "停止當前服務Nginx, 如果存在" net stop xx_nginx echo "刪除當前Web服務器Nginx" sc delete xx_nginx echo "開始安裝Nginx" cd /d %~dp0 echo 當前路徑爲 %cd% nssm install xx_nginx "%cd%\nginx.exe" nssm set xx_nginx Description "XXXnginx Web服務器" echo "按任意鍵啓動Nginx" pause echo nssm start xx_nginx echo "服務啓動完畢" #pause ::nssm remove rq_nginx
批處理命令還有很多待完善的地方
僅供參考
nssm相關批處理指令
Application Tab
應用基礎配置
nssm set <servicename> Application <fullpath> nssm set <servicename> AppDirectory <directory> nssm set <servicename> AppParameters [args...]
Details Tab
服務詳情
nssm set <servicename> DisplayName <displayname> nssm set <servicename> Description <description> nssm set <servicename> Start SERVICE_AUTO_START
啓動模式清單:
SERVICE_AUTO_START: Automatic 自動.
SERVICE_DELAYED_AUTO_START: Delayed 自動(延時啓動).
SERVICE_DEMAND_START: Manual 手動.
SERVICE_DISABLED: 禁用.
Log On Tab
登錄配置,用於配置當前服務以何種身份進行進程啓動,默認爲LocalSystem
nssm get <servicename> ObjectName nssm set <servicename> ObjectName <username> <password> nssm set <servicename> ObjectName <username> correct horse battery staple nssm set <servicename> ObjectName <username> ""
Dependencies Tab(服務依賴)
配置服務啓動依賴項,通過配置依賴服務名稱,實現服務依賴配置,配置多個依賴服務又空格分隔,既可以是寫入服務的名稱name
,又可以使服務的顯示名稱displayname
nssm set <servicename> DependOnService [servicname01] [servicename02] nssm set <servicename> DependOnService [service displayname01] [service displayname01]]
Process Tab
進程相關配置,用於設置應用程序的進程優先級和CPU
的執行選擇,默認情況下應用程序以正常優先級運行,並允許在所有CPU
上運行,如希望進程限制爲可用CPU
的子集,可取消選中"所有處理器"並依據實際情況選擇特定CPU
nssm set <servicename> AppPriority NORMAL_PRIORITY_CLASS nssm set <servicename> AppNoConsole 0 nssm set <servicename> AppAffinity All
AppNoConsole設置進程是否新建控制檯窗體,默認爲0
從版本 2.22 開始,nssm將默認爲應用程序創建一個新的控制檯窗口,允許一些程序運行,否則會失敗,例如那些希望能夠讀取用戶輸入的程序
若不需要,可以通過將 HKLM\System\CurrentControlSet\Services\servicename\Parameters 下的整數 (REG_DWORD) 值 AppNoConsole 設置爲非零值來禁用控制檯窗口
AppAffinity默認設置爲進程可在所有CPU上運行,可以指定對應數值,用於特定CPU上運行,連續可用-起始到終止,,逗號用於分隔不同CPU
AppAffinity默認設置爲進程可在所有CPU上運行,可以指定對應數值,用於特定CPU上運行,連續可用-起始到終止,,逗號用於分隔不同CPU
nssm set <servicename> AppAffinity 0-4,7
1
進程優先級配置
REALTIME_PRIORITY_CLASS
HIGH_PRIORITY_CLASS
ABOVE_NORMAL_PRIORITY_CLASS
NORMAL_PRIORITY_CLASS
BELOW_NORMAL_PRIORITY_CLASS
IDLE_PRIORITY_CLASS
————————————————
ShutDown Tab
停止服務,配置服務停止時,相關停止操作
nssm set <servicename> AppStopMethodSkip 0 nssm set <servicename> AppStopMethodConsole 1500 nssm set <servicename> AppStopMethodWindow 1500 nssm set <servicename> AppStopMethodThreads 1500
AppStopMethodSkip對應屬性設置是否選擇,默認爲0
配置值清單
1 - Don’t send Control-C to the console.
2 - Don’t send WM_CLOSE to windows.
4 - Don’t send WM_QUIT to threads.
8 - Don’t call TerminateProcess().
Exit actions Tab
nssm set <servicename> AppThrottle 1500 nssm set <servicename> AppExit Default Restart nssm set <servicename> AppRestartDelay 0
AppThrottle意外退出,延時重啓的時間間隔
爲避免 CPU 資源緊張,若受監控的應用程序在啓動後意外退出,nssm將限制服務的重新啓動
默認情況下,使用1500毫秒的閾值,要指定不同的值,需創建一個整數 (REG_DWORD) 值 HKLM\System\CurrentControlSet\Services\servicename\Parameters\AppThrottle 並將其設置爲所需的毫秒數
AppExit爲要配置應用程序退出時nssm應採取的操作,需編輯鍵 HKLM\System\CurrentControlSet\Services\servicename\Parameters\AppExit 的默認值
若nssm運行時註冊表中不存在該鍵,它將創建它並將值設置爲重新啓動。 將其更改爲忽略或退出以指定所採取的操作
nssm只會在此密鑰不存在時創建它, 用戶的更改不會被覆蓋,對應註冊表內容如下
Default Restart(Restart application)
Ignore(No action)
Exit(Stop service)
Suicide(Fack crash)
I/O Tab
配置文件輸出/輸出路徑,一般爲系統異常和日誌運行輸出日誌
nssm set <servicename> AppStdin [filepath] nssm set <servicename> AppStdout [filepath] nssm set <servicename> AppStderr [filepath]
>nssm set Frpc AppStderr C:\games\frpc\service.log
File rotation Tab
可與I/O
設置結合使用,用於配置服務重啓時輸出文件的輪換操作
nssm set <servicename> AppStdoutCreationDisposition 4 nssm set <servicename> AppStderrCreationDisposition 4 nssm set <servicename> AppRotateFiles 1 nssm set <servicename> AppRotateOnline 0 nssm set <servicename> AppRotateSeconds 86400 nssm set <servicename> AppRotateBytes 104856
AppStdoutCreationDisposition輸出CreationDisposition的參數值
AppStderrCreationDisposition異常輸出CreationDisposition的參數值
AppRotateFiles是否開啓文件輪換操作,1標識啓用,0表示取消
AppRotateOnline是否在服務運行時動態輪換日誌文件
AppRotateSeconds輪換文件觸發時間間隔數
AppRotateBytes輪換文件觸發的單文件大小閥值
————————————————
Environment Tab
可用於指定要傳遞給應用程序的以換行符分隔的環境變量列表
nssm set <servicename> AppEnvironmentExtra JAVA_HOME=C:\java nssm set <servicename> AppEnvironmentExtra CLASSPATH=C:\Classes TEMP=C:\Temp
例如,獲取環境變量
>nssm get <servicename> AppEnvironmentExtra CLASSPATH
C:\Classes