從指令碼重新啟動受管節點 - 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 的範例會在節點上安裝 Telnet-Client,然後重新啟動該節點。

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 }