跳到主要內容

停止伺服器

blocklet server stop 指令會優雅地關閉執行中的 Blocklet Server 實例。此過程包括停止所有執行中的 blocklet、路由引擎、核心伺服器進程以及任何相關的 Docker 容器。

用法

基本用法

bash
blocklet server stop [options]

優雅關閉程序

預設情況下,執行 blocklet server stop 會啟動一個循序關閉程序,以確保所有服務都能乾淨地終止並防止資料損毀。伺服器為此程序設定了 5 分鐘的逾時限制。

這是一個說明流程的圖表:

Stop Server

優雅關閉的關鍵步驟如下:

  1. 檢查開發模式的 Blocklet

    伺服器首先會檢查是否有任何 blocklet 在開發模式下執行。若有,停止指令將會失敗,您必須先手動停止開發程序。

  2. 通知客戶端

    廣播一個 NODE_STOPPED 事件,以通知任何已連線的網頁儀表板使用者即將關機。

  3. 停止路由引擎

    停止伺服器的路由引擎。

  4. 停止 Blocklet

    逐一停止每個執行中的 blocklet。

  5. 停止核心進程

    終止由 PM2 管理的主要 Blocklet Server 進程(daemonserviceevent-hub)。

  6. 停止 Docker 容器

    停止由 Blocklet Server 管理的任何 Docker 容器。

  7. 更新狀態

    將伺服器的狀態更新為 STOPPED

選項

選項說明
--force強制停止所有與 Blocklet Server 相關的進程。此選項會繞過優雅關閉的程序,適用於伺服器無法正常停止的情況。

強制停止

使用 --force 旗標會啟動一個更具侵略性的關閉程序,逾時時間為 20 秒。此程序將會:

  • 立即清除所有路由器的設定和快取。
  • 直接終止所有與 Blocklet Server 和任何 blocklet 相關的 PM2 進程。
  • 終止主要的 PM2 daemon 本身。
  • 停止任何受管理的 Docker 容器。

當伺服器變得無回應且優雅停止指令逾時,建議使用此解決方案。

範例

標準優雅停止

若要執行標準的伺服器優雅關閉:

基本停止指令

bash
blocklet server stop

您將會看到指示每個元件成功關閉的輸出:

預期輸出

text
Sending shutdown notification to web dashboard users ✔
Routing engine is stopped successfully ✔
Blocklet My-Blocklet is stopped successfully ✔
...
daemon is stopped successfully ✔
service is stopped successfully ✔
event-hub is stopped successfully ✔
Docker containers managed by blocklet server are stopped ✔
Done! ✔

強制停止伺服器

如果伺服器無回應或優雅停止失敗,請使用 --force 旗標。

強制停止指令

bash
blocklet server stop --force

此指令將會嘗試直接停止所有相關進程。

強制停止的預期輸出

text
nginx router is stopped successfully ✔
All blocklet processes stopped successfully ✔
Docker containers managed by blocklet server are stopped ✔

疑難排解

開發模式中的 Blocklet

如果您有 blocklet 在開發模式下執行(使用 blocklet dev),blocklet server stop 指令將會失敗,並顯示類似以下的訊息:

開發模式錯誤訊息

text
Unable to stop Blocklet Server, please stop the development by pressing Ctrl + C in the terminal of my-dev-blocklet

您必須前往執行開發程序的終端機,並按下 Ctrl + C 來停止它,然後才能停止主伺服器。

伺服器停止失敗

如果優雅關閉程序耗時過長(預設逾時為 5 分鐘),您將會看到一則錯誤訊息。在這種情況下,您應該使用強制停止指令:

逾時錯誤訊息

text
Blocklet Server failed to stop within 5 minutes
You can stop blocklet server with blocklet stop --force