[英]How to run a AWS CLI command using crontab for every minute
我有 AWS CLI 命令來創建數據庫快照,我想創建帶有當前時間戳的數據庫快照。
我無法使用 cron 選項卡運行命令。
要創建 Amazon RDS 數據庫實例,請使用以下命令
aws rds create-db-instance --db-instance-identifier testrds --allocated-storage 5 --db-instance-class db.m1.small --engine mysql --availability-zone us-east-1d --master-username rajuuser --master-user-password mrajuuser --port 7007 --no-multi-az --no-auto-minor-version-upgrade
要創建數據庫快照,請使用以下命令
aws rds create-db-snapshot --db-instance-identifier testrds --db-snapshot-identifier testrds
我正在關注的shell 腳本
#!/bin/sh
#echo "Hello world"
now=$(date +"%Y-%m-%d-%H-%M-%S")
cd /home/ubuntu
cmd="$(aws rds create-db-snapshot --db-instance-identifier testrds --db-snapshot-identifier testrds:"$(now)")"
echo $cmd
我遇到了同樣的錯誤,我發現提供 aws cli 的完整路徑解決了這個問題(對我來說,hjpotter 中的路徑與 hjpotter 的答案不同)。
#!/bin/sh
HOME="/home/ubuntu"
AWS_CONFIG_FILE="/home/ubuntu/.aws/config"
d=$(date +"%Y-%m-%d-%H-%M")
/home/ubuntu/.local/bin/aws rds create-db-snapshot --db-instance-identifier myid --db-snapshot-identifier prod-scheduled-$d
由於 AWS 每天只創建一次 RDS 快照,我的要求是每天創建多個快照,按照固定的時間表,從 cronjob(例如,早上 6 點、上午 10 點、下午 2 點、下午 6 點、晚上 10 點)觸發。
因此,為了保持“合理”的成本,我還添加了一個步驟來刪除昨天拍攝的所有“cron”快照:
y=$(date -d "1 day ago" +"%Y-%m-%d-%H-%M")
aws rds delete-db-snapshot --db-snapshot-identifier prod-scheduled-$y
通過這種方式,我可以每天保留一個快照用於歷史目的,並保留過去 24 小時內的多個快照,以防我需要縮短間隔。
盡管這不是問題的一部分,但 Luke Petersen 將其評論為成本過高,也許其他人也有相同的要求(就像我一樣)。
最后一件事:通過使用恢復到時間點功能可以實現類似(和 AFAIK,更清潔)的解決方案,該功能使用每日快照和事務日志將數據庫實例恢復到自定義的特定日期和時間(在備份保留期內)。
我有一個類似的 cron 任務設置來備份 EC2 中的某些實例。 這是我如何設置它:
$ crontab -l
0 14 * * * /usr/bin/zsh /home/hjpotter92/snapshot.zsh
和snapshot.zsh
的內容:
#!/usr/bin/zsh
HOME="/home/hjpotter92"
AWS_HOME="$HOME/.aws"
PATH="/usr/local/bin:/usr/bin:/bin:$PATH"
DATE=`date +%c`
aws ec2 create-snapshot --volume-id XXXXXXXX \
--description "${DATE}" \
--profile hjpotter92 \
--region "us-west-2" >> /home/hjpotter92/cron.out 2>&1
請注意,雖然我上面的腳本是可執行的(設置了x
權限位),但我仍然為其提供了 shell 名稱。
問題是,您的命令存在字符串/變量插值問題。
此外, /bin/sh
沒有其他 shell 提供的很多功能。 將腳本的 head 部分更改為使用 bash(?)。
#!/bin/bash
now=$(date +"%Y-%m-%d-%H-%M-%S")
cd /home/ubuntu
aws rds create-db-snapshot --db-instance-identifier testrds --db-snapshot-identifier "testrds:${now}" >> some-log.txt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.