簡體   English   中英

使用 AWS CLI 啟動服務腳本?

[英]Start service script using AWS CLI?

我正在嘗試配置一個 EC2 實例,在實例啟動時與特定的 AWS SQS 自動通信。 為此,我編寫了一個 systemd 啟動腳本,它將執行 shell 腳本。

[Unit]
Description=NewUnit

[Service]
ExecStart=/usr/local/bin/startup_script.sh

[Install]
WantedBy=default.target

shell 腳本基本上測量實例的 CPU 使用率並將此信息發送到隊列。 使我的計划失敗的關鍵部分是我嘗試調用 aws cli 函數“發送消息”的那一行:

while true; do
CONTENT='{"vmid":{"DataType":"String","StringValue":"'$(getEC2ID)'"},"vmcpu":{"DataType":"Number","StringValue":"'$(getCPU)'"},"vmmemory":{"DataType":"Number","StringValue":"'$(getMemory)'"},"vmdisk":{"DataType":"Number","StringValue":"12345"}}'

aws sqs send-message \
    --queue-url "$QUEUE_URL" \
    --message-body "$CONTENT" \
    --message-group-id "$GROUP_ID" \
    --message-deduplication-id "$(getID)" \
#    --message-attributes "$CONTENT" \ || echo "not yet" >>/usr/local/bin/startup_report.txt
done

我想問題是執行腳本時 awscli 還沒有准備好。 所以此時我的問題是:我怎樣才能使用 systemd 等待 awscli 之后執行這個 shell 腳本?

您編寫服務文件的方式沒有指定任何順序或要求。 這允許 systemd 隨時運行它。 特別是這可能需要很長時間才能啟動網絡,就像我使用 aws cli 的腳本一樣。 將以下指令添加到文件的 Unit 部分:

After=network.target

...將使其在網絡啟動后運行。 如果這對您不起作用,那么您可能希望將其更改為:

After=network-online.target

...當您的腳本運行時,這應該保證完整的網絡操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM