使用 AWS CLI 启动服务脚本?
Start service script using AWS CLI?
我正在尝试将 EC2 实例配置为在实例启动时自动与特定 AWS SQS 通信。为此,我编写了一个 systemd 启动脚本,它将执行 shell-script.
[Unit]
Description=NewUnit
[Service]
ExecStart=/usr/local/bin/startup_script.sh
[Install]
WantedBy=default.target
shell 脚本基本上测量实例的 CPU 使用情况并将此信息发送到队列。使我的计划失败的关键部分是我尝试调用 aws cli 函数的行 'send-message':
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
...当您的脚本 运行s.
时应该保证完整的网络操作
我正在尝试将 EC2 实例配置为在实例启动时自动与特定 AWS SQS 通信。为此,我编写了一个 systemd 启动脚本,它将执行 shell-script.
[Unit]
Description=NewUnit
[Service]
ExecStart=/usr/local/bin/startup_script.sh
[Install]
WantedBy=default.target
shell 脚本基本上测量实例的 CPU 使用情况并将此信息发送到队列。使我的计划失败的关键部分是我尝试调用 aws cli 函数的行 'send-message':
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
...当您的脚本 运行s.
时应该保证完整的网络操作