Windows Service

解決問題 Windows Service (2)

教學目標

初步了解如何透過 Windows 服務的指令打包成批次檔解決過多服務難以進行停止、啟動和取得狀態的問題。

重點概念

首先許多企業需要進行備援演練,此時若我們導入的系統平台會需要執行許多服務,將會面臨過多服務難以進行停止、啟動和取得狀態的問題,則我們需要如何解決此問題呢?其實可以直接透過 Windows 服務的指令打包成批次檔解決此問題,何謂 Windows 服務,它主要是在作業系統中執行於後台的程式,其可以設定為在作業系統啟動時執行,並且在 Windows 執行期間持續在後台執行,服務也能夠手動或基於某個事件啟動。此外 Widnows 服務主要執行於三種使用者帳號的環境中,分別為系統、網路服務和本地服務,並且透過 Windows 服務託管程序 (svchost.exe) 以利 Windows 服務執行於專用使用者帳號中,其能夠在使用者未登錄時開始執行。

接著雖然我們能夠透過「服務」工具管理服務,但是當面對需要管理許多服務,並且需要按照順序停止或啟動,將會是非常麻煩的情況,尤其是當需要以最快的時間完成系統重新啟動的作業。 此時我們能夠透過指令的方式,打包成批次檔 (bat) 直接在 Windows 作業系統中執行,以利自動啟動服務或停止服務。

再來的為了達到自動啟動服務或停止服務,我們主要會有三種操作服務的指令方式,分別為:

  1. NET
  2. SC
  3. PowerShell

NET

啟動服務

1
2
3
> net start <服務名稱>
<服務顯示名稱> 服務正在啟動
<服務顯示名稱> 服務已經啟動成功。

停止服務

1
2
3
> net stop <服務名稱>
<服務顯示名稱> 服務正在停止
<服務顯示名稱> 服務已經成功停止。

SC

啟動服務

1
2
3
4
5
6
7
8
9
10
11
> sc start <服務名稱>
SERVICE_NAME: <服務名稱>
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 2 START_PENDING
(NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x7d0
PID : 1208
FLAGS :

停止服務

1
2
3
4
5
6
7
8
9
> sc stop <服務名稱>
SERVICE_NAME: <服務名稱>
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 3 STOP_PENDING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0

取得服務狀態

1
2
3
4
5
6
7
8
9
> sc query <服務名稱>
SERVICE_NAME: <服務名稱>
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0

PowerShell

啟動服務

1
> Start-Service <服務名稱>

停止服務

1
> Stop-Service <服務名稱>

取得服務狀態

1
2
3
4
> Get-Service <服務名稱>
Status Name DisplayName
------ ---- -----------
Running <服務名稱> <服務顯示名稱>

最後若我們要打包為批次檔,若要啟動服務則可以透過「net start <服務名稱>」指令按照順序啟動服務,並且加上「/y」參數預設回答問題為「是」。此外若同時有許多服務需要執行時,並且需要間隔三十秒時,則可以透過「timeout /t 30 /nobreak」指令。若要啟動服務則可以透過「net stop <服務名稱>」指令按照順序停止服務,並且加上「/y」參數預設回答問題為「是」。若要查詢服務的狀態則可以透過建議透過「sc query <服務名稱> | find “STATE”」指令查詢服務狀態。

總結我們可以透過 Windows 服務的指令打包成批次檔解決過多服務難以進行停止、啟動和取得狀態的問題。

相關資源

解決問題 Windows Service (1)

教學目標

初步了解如何透過 NSSM 工具輕易建立、設定、啟動、停止、重新啟動與刪除操作 Windows 服務。

重點概念

當我們下載開源軟體手動執行時,若要在重新開機時自動背景啟動伺服器時,首先會直接使用 Windows 內建 SC 工具進行 Windows 服務的操作,但是建立 Windows 服務則要考慮的參數設定很多,此時我們就可以透過 NSSM 工具輕易建立、設定、啟動、停止、重新啟動與刪除操作 Windows 服務。

建立服務

透過命令提示字元安裝 Windows 服務。

1
$ nssm install "服務名稱"

設定服務

主要設定以下參數設定,確認參數無誤之後,按下「Install service」鈕,按下「確定」鈕即代表 Windows 服務已經建立成功。

頁籤 參數 說明
Application Path 執行應用程式的路徑和名稱。
Application Startup Directory 啟動資料夾。
Application Arguments 應用程式參數。
I/O Output (stdout) 結果輸出檔案。
I/O Error (stderr) 錯誤輸出檔案。

啟動服務

1
$ nssm start "服務名稱"

停止服務

1
$ nssm stop "服務名稱"

重啟服務

1
$ nssm restart "服務名稱"

刪除服務

1
$ nssm remove "服務名稱"

總結我們可以透過 NSSM 工具輕易建立、設定、啟動、停止、重新啟動與刪除操作 Windows 服務。

相關資源