@zxcvb #17 claude写的,不知道有没有问题。 #!/usr/bin/env bash set -uo pipefail 读取配置 source "$(dirname "$0")/grab.conf" OCI="/home/ubuntu/bin/oci" LOG="$(dirname "$0")/grab.log" log(){ echo "[$(date '+%F %T')] $*" | tee -a "$LOG"; } tg(){ # 发 Telegram 通知,失败不影响主流程 curl -s --max-time 15 "$TG_BASE" --data-urlencode "chat_id=${TG_CHAT_ID}" --data-urlencode "text=$1" >/dev/null 2>&1 || true } 刹车二(前置):已有 cpp 实例就别再抢 exists(){ $OCI compute instance list --compartment-id "$COMPARTMENT_ID" --lifecycle-state RUNNING --query "data[?"display-name"=='${INSTANCE_NAME}'] | length(@)" --raw-output 2>/dev/null } log "===== 抢机启动:${INSTANCE_NAME} ${OCPU}C${MEM_GB}G @ ${AD} =====" tg "🚀 抢机启动:${INSTANCE_NAME} ${OCPU}C/${MEM_GB}G,开始尝试。" for ((i=1; i<=MAX_TRIES; i++)); do 刹车二 cnt=$(exists) if [[ "$cnt" =~ ^[0-9]+$ ]] && (( cnt > 0 )); then log "检测到已存在 RUNNING 的 ${INSTANCE_NAME},停止。" tg "✅ 已存在实例 ${INSTANCE_NAME},脚本停止(防重复)。" exit 0 fi log "第 ${i}/${MAX_TRIES} 次尝试创建…" OUT=$($OCI compute instance launch --compartment-id "$COMPARTMENT_ID" --availability-domain "$AD" --shape "VM.Standard.A1.Flex" --shape-config "{"ocpus"😒{OCPU},"memoryInGBs"😒{MEM_GB}}" --image-id "$IMAGE_ID" --subnet-id "$SUBNET_ID" --assign-public-ip true --display-name "$INSTANCE_NAME" --boot-volume-size-in-gbs "$BOOT_GB" --metadata "{"ssh_authorized_keys":"${SSH_PUBKEY}"}" 2>&1) RC=$? if (( RC == 0 )); then # 刹车一:成功即停 OCID=$(echo "$OUT" | grep -o 'ocid1.instance[^"]*' | head -1) log "🎉 创建成功!OCID=${OCID}" tg "🎉 抢到了!${INSTANCE_NAME} ${OCPU}C/${MEM_GB}G 创建成功(第 ${i} 次)。去控制台看公网 IP。" exit 0 fi if echo "$OUT" | grep -qi "Out of host capacity"; then log "容量不足,等待重试。" else # 非容量错误:立即停,别傻抢 log "❌ 非容量错误,停止:$OUT" tg "⚠️ 抢机遇到非容量错误已停止,请查日志:$(echo "$OUT" | head -c 300)" exit 1 fi sleep $(( SLEEP_BASE + RANDOM % 21 )) # 60s + 0~20s 抖动 done 刹车三:次数耗尽 log "达到最大尝试次数 ${MAX_TRIES},退出。" tg "⏹ 抢机达到上限 ${MAX_TRIES} 次仍未成功,已停止。可重新启动。" exit 2 ubuntu@rss-vnic:~$ cat oci-grab/grab.conf ===== OCI 抢机配置 ===== COMPARTMENT_ID="" AD="" SUBNET_ID="" IMAGE_ID="" SSH_PUBKEY="" 实例规格 INSTANCE_NAME="cpp" OCPU=2 MEM_GB=12 BOOT_GB=100 抢机节奏 MAX_TRIES=800 SLEEP_BASE=60 Telegram 通知 TG_BASE="https://" TG_CHAT_ID=""
恭喜
12g还是好抢的,手动说不定都能开到。24就得抢了
厉害~
甲骨文脚本吗?
@jhsyue #14 是的,让claude帮我写了一个甲骨文脚本。放在我的oracle上抢oracle。早上只开了一个最小的。
🐂
推来用一下
@zxcvb #17 claude写的,不知道有没有问题。
#!/usr/bin/env bash
set -uo pipefail
读取配置
source "$(dirname "$0")/grab.conf"
OCI="/home/ubuntu/bin/oci"
LOG="$(dirname "$0")/grab.log"
log(){ echo "[$(date '+%F %T')] $*" | tee -a "$LOG"; }
tg(){ # 发 Telegram 通知,失败不影响主流程
curl -s --max-time 15 "$TG_BASE"
--data-urlencode "chat_id=${TG_CHAT_ID}"
--data-urlencode "text=$1" >/dev/null 2>&1 || true
}
刹车二(前置):已有 cpp 实例就别再抢
exists(){
$OCI compute instance list
--compartment-id "$COMPARTMENT_ID"
--lifecycle-state RUNNING
--query "data[?"display-name"=='${INSTANCE_NAME}'] | length(@)"
--raw-output 2>/dev/null
}
log "===== 抢机启动:${INSTANCE_NAME} ${OCPU}C${MEM_GB}G @ ${AD} ====="
tg "🚀 抢机启动:${INSTANCE_NAME} ${OCPU}C/${MEM_GB}G,开始尝试。"
for ((i=1; i<=MAX_TRIES; i++)); do
刹车二
cnt=$(exists)
if [[ "$cnt" =~ ^[0-9]+$ ]] && (( cnt > 0 )); then
log "检测到已存在 RUNNING 的 ${INSTANCE_NAME},停止。"
tg "✅ 已存在实例 ${INSTANCE_NAME},脚本停止(防重复)。"
exit 0
fi
log "第 ${i}/${MAX_TRIES} 次尝试创建…"
OUT=$($OCI compute instance launch
--compartment-id "$COMPARTMENT_ID"
--availability-domain "$AD"
--shape "VM.Standard.A1.Flex"
--shape-config "{"ocpus"😒{OCPU},"memoryInGBs"😒{MEM_GB}}"
--image-id "$IMAGE_ID"
--subnet-id "$SUBNET_ID"
--assign-public-ip true
--display-name "$INSTANCE_NAME"
--boot-volume-size-in-gbs "$BOOT_GB"
--metadata "{"ssh_authorized_keys":"${SSH_PUBKEY}"}"
2>&1)
RC=$?
if (( RC == 0 )); then
# 刹车一:成功即停
OCID=$(echo "$OUT" | grep -o 'ocid1.instance[^"]*' | head -1)
log "🎉 创建成功!OCID=${OCID}"
tg "🎉 抢到了!${INSTANCE_NAME} ${OCPU}C/${MEM_GB}G 创建成功(第 ${i} 次)。去控制台看公网 IP。"
exit 0
fi
if echo "$OUT" | grep -qi "Out of host capacity"; then
log "容量不足,等待重试。"
else
# 非容量错误:立即停,别傻抢
log "❌ 非容量错误,停止:$OUT"
tg "⚠️ 抢机遇到非容量错误已停止,请查日志:$(echo "$OUT" | head -c 300)"
exit 1
fi
sleep $(( SLEEP_BASE + RANDOM % 21 )) # 60s + 0~20s 抖动
done
刹车三:次数耗尽
log "达到最大尝试次数 ${MAX_TRIES},退出。"
tg "⏹ 抢机达到上限 ${MAX_TRIES} 次仍未成功,已停止。可重新启动。"
exit 2
ubuntu@rss-vnic:~$ cat oci-grab/grab.conf
===== OCI 抢机配置 =====
COMPARTMENT_ID=""
AD=""
SUBNET_ID=""
IMAGE_ID=""
SSH_PUBKEY=""
实例规格
INSTANCE_NAME="cpp"
OCPU=2
MEM_GB=12
BOOT_GB=100
抢机节奏
MAX_TRIES=800
SLEEP_BASE=60
Telegram 通知
TG_BASE="https://"
TG_CHAT_ID=""
@kennyiskw146 #10 开nat🐔分享出去,收点钱,我刚刚买了一个挺快的网速
@Bugs #15 牛逼了