全部產品
Search
文件中心

Elastic Compute Service:使用雲助手外掛程式進行服務保活

更新時間:Apr 12, 2025

服務或指令碼在運行過程中可能會因程式異常、伺服器重啟、掉電等情況而停止運行,如果不能及時恢複運行,會對線上業務造成損失。本文介紹使用雲助手ecs-tool-servicekeepalive外掛程式進行服務保活。

原理介紹

雲助手ecs-tool-servicekeepalive外掛程式是基於Linux作業系統的systemd服務實現的。該外掛程式通過定時監測機制,確保在服務或指令碼被中斷時能夠迅速恢複運行,從而保障服務的可靠性和持久性。在使用該外掛程式進行服務保活時,使用者需輸入服務或程式的啟動命令,外掛程式將根據使用者輸入的命令自動產生systemd服務配置,使用者無需手動編輯設定檔。在組建組態檔案後,systemd服務元件將啟動服務並將其設定為開機自啟動。

說明

systemd service是Linux系統中用來管理服務的組件,例如實現開機自啟動和服務意外停止後自啟動等。詳細介紹,請參見systemd官方文檔

使用說明

啟用服務保活

完成服務部署後,以root 使用者運行雲助手外掛程式ecs-tool-servicekeepalive

以root使用者運行服務

sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "start,'<cmd>'"

<cmd>:需替換為服務啟動命令。使用樣本如下。

  • shell 程式:(/bin/bash /home/ecs-user/keepalive-simple/test-keepalive.sh )。

  • python 程式:(python /home/root/main.py)。

通過指定使用者運行服務

sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "start,execstart='<cmd>',user=<user_name>,group=<group_name>"
  • <cmd>:需替換為服務啟動命令。使用樣本如下。

    • shell 程式:(/bin/bash /home/ecs-user/keepalive-simple/test-keepalive.sh )。

    • python 程式:(python /home/root/main.py)。

  • <user_name>:替換為服務啟動並執行使用者名稱。執行cut -d: -f1 /etc/passwd可查看已建立的使用者。

  • <group_name>:替換為服務啟動並執行使用者組名。執行cut -d: -f1 /etc/group可查看已建立的使用者組。

警告
  • 指令碼或程式檔案路徑表示形式必須為絕對路徑。

  • 當您啟用服務保活失敗時,在錯誤修複完成重新啟用服務之前,建議您查詢服務保活狀態後,對之前配置失敗的服務保活條目執行關閉服務保活操作,然後再重新啟用服務保活,避免啟動多個服務進程從而引發您的業務異常。

查詢服務保活狀態

運行如下命令,查詢是否啟用服務保活。

sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "status"

回顯資訊樣本如下,表明服務保活啟用成功。

service_name                   execstart            user  group status              
ecs_keepalive_1744262359.service /bin/bash /home/ecs-user/keepalive-simple/test-keepalive.sh /home/ecs-user/keepalive-simple/test-keepalive.log              active (running) since Thu 2025-04-10 13

關閉服務保活

如果您需要取消服務保活,可執行如下命令。

sudo acs-plugin-manager --exec --local --plugin ecs-tool-servicekeepalive --params "stop <service_name>"

<service_name>:替換為已配置的服務配置名稱(即查詢服務保活狀態步驟回顯資訊中的service_name列)。

說明

關閉服務保活時,會結束服務進程,並同時取消服務開機自啟動,由ecs-tool-servicekeepalive 外掛程式建立的服務組態檔也會被刪除。

使用樣本

  1. 準備測試服務指令碼。

    該指令碼以使用者工作目錄為/home/ecs-user 為例,請根據實際工作目錄替換指令碼中的工作目錄。

    # 在/home/ecs-user目錄建立keepalive-simple檔案夾,並在該檔案夾下建立test-keepalive.sh指令碼
    sudo mkdir -p /home/ecs-user/keepalive-simple && \
    sudo tee /home/ecs-user/keepalive-simple/test-keepalive.sh > /dev/null << 'EOF'
    #!/bin/bash
    # 每秒列印一行日誌到使用者指定的記錄檔中。
    while true
    do
       sudo echo "$(date '+%Y-%m-%d %H:%M:%S') progress is alive" >> $1
        sleep 1
    done
    EOF
    # 為指令碼添加可執行許可權
    sudo chmod +x /home/ecs-user/keepalive-simple/test-keepalive.sh
  2. (可選)查詢服務運行狀態。

    運行如下命令,查詢服務運行狀態。

    ps aux | grep test-keepalive.sh

    回顯結果樣本如下,表明此時服務未運行。

    ecs-user    2207  0.0  0.0 221528   916 pts/0    S+   11:34   0:00 grep --color=auto test-keepalive.sh
  3. 啟用服務保活。

    sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "start,'/bin/bash /home/ecs-user/keepalive-simple/test-keepalive.sh /home/ecs-user/keepalive-simple/test-keepalive.log'"

    回顯資訊樣本如下,表明服務保活啟用成功。

    Created symlink /etc/systemd/system/multi-user.target.wants/ecs_keepalive_1744256544.service → /etc/systemd/system/ecs_keepalive_1744256544.service.
    Start systemd service for "/bin/bash /home/ecs-user/keepalive-simple/test-keepalive.sh /home/ecs-user/keepalive-simple/test-keepalive.log" success
  4. 查詢服務保活及運行狀態。

    1. 運行如下命令,查詢服務保活狀態。

      sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "status"

      回顯結果樣本如下,表明服務保活啟用成功,且當前服務為運行中狀態。

      service_name                   execstart            user  group status              
      ecs_keepalive_1744256544.service /bin/bash /home/ecs-user/keepalive-simple/test-keepalive.sh /home/ecs-user/keepalive-simple/test-keepalive.log              active (running) since Thu 2025-04-10 11
    2. 運行如下命令,查詢服務運行狀態。

      ps aux | grep test-keepalive.sh

      回顯結果樣本如下,表明服務為運行中狀態。

      root        3144  0.0  0.0 222200  3420 ?        Ss   11:42   0:00 /bin/bash /home/ecs-user/keepalive-simple/test-keepalive.sh /home/ecs-user/keepalive-simple/test-keepalive.log
      ecs-user    6841  0.0  0.0 221660   968 pts/0    S+   11:49   0:00 grep --color=auto test-keepalive.sh
  5. (可選)驗證服務保活效果。

    1. 通過手動觸發可能導致服務進程停止的情況,驗證在發生異常情況下服務進程停止時,雲助手是否能夠重新啟動該進程。

      方式一:重啟ECS 執行個體

      通過控制台重啟執行個體,以類比伺服器異常重啟的情況。

      方式二: kill進程

      運行如下命令,結束test-keepalive.sh進程。其中<進程號>替換為通過 ps 命令查詢到的程式 PID。

      sudo date && kill -9 <進程號>
    2. 運行如下命令,查詢服務運行狀態。

      ps aux | grep test-keepalive.sh

      回顯結果樣本如下,表明服務為運行中狀態。

      root       33061  0.0  0.0 222200  3504 ?        Ss   13:19   0:00 /bin/bash /home/ecs-user/keepalive-simple/test-keepalive.sh /home/ecs-user/keepalive-simple/test-keepalive.log
      ecs-user   34558  0.0  0.0 221660  2556 pts/0    S+   13:23   0:00 grep --color=auto test-keepalive.sh
  6. 關閉服務保活。

    運行如下命令,關閉服務保活。

    sudo acs-plugin-manager --exec --local --plugin ecs-tool-servicekeepalive --params "stop ecs_keepalive_1744256544.service"

    回顯資訊樣本如下,說明服務保活配置關閉成功。

    service check ok, file:ecs_keepalive_1744256544.service is valid
    Removed /etc/systemd/system/multi-user.target.wants/ecs_keepalive_1744256544.service.
    stop service ok, service:ecs_keepalive_1744256544.service is stopped and removed

相關文檔

關於雲助手的更多資訊,請參見雲助手概述