執行命令時處理重新啟動 - AWS Systems Manager

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

執行命令時處理重新啟動

如果您使用Run Command的 AWS Systems Manager功能來執行重新啟動受管節點的指令碼,建議您在指令碼中指定結束代碼。如果您嘗試使用其他機制重新啟動節點,指令碼執行狀態可能不會正確更新 (即使指令碼中最後一個步驟是重新啟動)。對於 Windows 受管節點,您需要在指令碼中指定 exit 3010。對於 Linux 和 macOS 受管節點,您需要指定 exit 194。結束代碼會指示 AWS Systems Manager Agent (SSM Agent) 重新啟動受管理節點,然後在重新開機完成後重新啟動指令碼。開始重新啟動前,SSM Agent 會在伺服器重新啟動期間,於通訊遭到中斷的雲端中通知 Systems Manager 服務。

注意

重新啟動指令碼不能是 aws:runDocument 外掛程式的一部分。如果文件包含重新啟動指令碼,而另一份文件嘗試透過 aws:runDocument 外掛程式執行該文件,則 SSM Agent 會傳回錯誤。

建立等冪的指令碼

當開發重新啟動受管節點的指令碼時,將指令碼設為等冪,如此一來,指令碼執行會在重新啟動後中斷處繼續進行。等冪指令碼會管理狀態並驗證動作是否已執行。這可在僅預期執行一次步驟時,防止執行多次步驟。

以下是等冪指令碼的概述範例,該指令碼會多次重新啟動受管節點。

$name = Get current computer name If ($name –ne $desiredName) { Rename computer exit 3010 } $domain = Get current domain name If ($domain –ne $desiredDomain) { Join domain exit 3010 } If (desired package not installed) { Install package exit 3010 }

範例

以下指令碼範例使用結束程式碼來重新啟動受管節點。Linux 範例會在 Amazon Linux 上安裝套件更新,然後重新啟動該節點。這個Windows Server範例會在節點上安裝 Telnet 用戶端,然後重新啟動它。

Amazon Linux
#!/bin/bash yum -y update needs-restarting -r if [ $? -eq 1 ] then exit 194 else exit 0 fi
Windows
$telnet = Get-WindowsFeature -Name Telnet-Client if (-not $telnet.Installed) { # Install Telnet and then send a reboot request to SSM Agent. Install-WindowsFeature -Name "Telnet-Client" exit 3010 }