[英]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.