Digitalocean DOCTL和Bash循环-难倒
到目前为止,此脚本仍然有效:Digitalocean DOCTL和Bash循环-难倒,bash,digital-ocean,Bash,Digital Ocean,到目前为止,此脚本仍然有效: #!/bin/bash # script to create digitalocean droplet snapshot using their CLI, doctl. # Function to set variable for snapshot name as date/time of creation. timestamp() { NAME=$(date) } timestamp doctl compute droplet-action snapshot
#!/bin/bash
# script to create digitalocean droplet snapshot using their CLI, doctl.
# Function to set variable for snapshot name as date/time of creation.
timestamp() {
NAME=$(date)
}
timestamp
doctl compute droplet-action snapshot --snapshot-name "$NAME" 80750079
该脚本的工作结果是以创建日期/时间为名称的水滴快照。
但是,我只需要保留12个快照
不知何故,我需要计算现有快照的数量,当我有12个快照时,删除最旧的快照并添加一个新快照
我怎样才能做到这一点
我每两小时运行一次脚本
谢谢 使用数组。下面是一个使用简单bash命令的示例
declare -a alphabet=();
index=0;
for letters in {a..z}; do
alphabet[$((index++))]=$letters;
sleep 1;
done
- 要查看数组中的所有元素:
printf'%s\n'${alphabet[@]}
- 要访问特定元素,请使用其索引。例如,要访问字母b,可以执行以下操作:
printf'%s\n'${alphabet[1]}
- 注意:数组的索引从0开始
- 您可以使用
${#alphabet[@]}
#!/bin/bash
exec &> do_snapshot.log
timestamp() {
NAME=$(date)
}
timestamp
SNAPSHOTS=$(/snap/bin/doctl compute image list-user --format "ID" --no-header | wc -l)
if [ "$SNAPSHOTS" -gt 23 ]; then
mapfile -t IDLIST < <(/snap/bin/doctl compute image list-user --format "ID" --no-header)
OLDEST=${IDLIST[0]}
/snap/bin/doctl compute image delete "$OLDEST"
fi
/snap/bin/doctl compute droplet-action snapshot --snapshot-name "$NAME" 8Xxxxxx0079
mail -s "Digital Ocean Hourly Snapshot" my email@gmail.com < do_snapshot.log
rm do_snapshot.log
exit 0
#/bin/bash
exec&>do_snapshot.log
时间戳(){
名称=$(日期)
}
时间戳
快照=$(/snap/bin/doctl计算映像列表用户--格式“ID”--无标题| wc-l)
如果[“$SNAPSHOTS”-gt 23];然后
mapfile-t IDLIST<听起来很棒;你们试过什么?你们不能直接使用logrotate
吗?我遵循你们的例子,但我必须弄清楚如何使用doctl获取快照数组。不过,感谢您对使用数组的指导:)我不知道什么是doctl
,也不知道水滴快照的输出可能是什么样子。但不管怎样,如果您想要存储、索引和替换多个值,数组是一种可行的方法。Bash语法会使它们看起来比实际更复杂。