阿里云定时任务并自动释放

前言

最近写了一个爬虫脚本, 脚本跑在一台北京的 ecs 上. 但奈何因某种未知力量, 需要连接代理才能访问目标网站.

本来想着自己搭代理, 但是太贵了, 就暂时搁置了. 直到我发现了这个:

image-20210926231548381

阿里云香港的服务器, 一个小时才5分钱. 如果脚本直接跑在香港服务器上不就可以了咩, 按照这个价格, 我每天使用一个小时, 一个月也就不到两块(流量另付).

窥探

我的基本思路是这样的:

  • 北京 ecs 定时任务, 创建并启动香港 ecs
  • 在香港 ecs 上执行任务
  • 任务执行完成后, 将香港 ecs 删除

说干就干, 查了一下阿里云提供的API, 云服务商确实是方便, 基本所有操作都可以通过API来执行. API文档地址: https://next.api.aliyun.com/api/Ecs

API文档上每个语言的每个接口, 都有对应的 demo, 这点点个赞.

启动 ecs

启动 ecs 方法: runInstances, 可以自定义参数, 不过个人推荐创建一个启动模板, 比较方便:

image-20210926232534600

其中的UserData参数 其实就是一个小脚本, 不过不能超过16kb. 自定义数据文档

我们就通过他, 在 ecs 创建之后自动执行任务.

通过下面命令, 可查看传入 ecs 的脚本内容(其实在文档中写的很清楚了):

curl http://100.100.100.200/latest/user-data

好, 我们启动的脚本需要执行以下操作:

  1. 初始化环境
  2. 将需要运行的项目拽下来
  3. 运行脚本
  4. 完成后将自己删除

我的脚本大概这样, 可供参考:

#!/bin/sh
# 先下载依赖
apt update
apt install -y git php curl 
# 安装 composer
export HOME=/root
curl -sS https://getcomposer.org/installer -o /root/composer-setup.php
/usr/bin/php /root/composer-setup.php --install-dir=/usr/local/bin --filename=composer
# 下载项目
git clone xxx /var/workspace
# 安装vendor
cd /var/workspace
printf 'yes\n' | composer install
# 导入配置文件
echo '$confJson' > /var/workspace/cron/conf.json
# 运行命令...
# 运行脚本将自己删除
php /var/worspace/cron/delete_self.php

注意, 这里将删除自己的脚本单独拿出来了, 为什么不再任务脚本执行完成后直接删除自己呢? 如果因为某种不可知的原因, 任务脚本挂了, 会导致实例没有被正常删除, 这可都是白花花的银子啊.

如果你遇到UserData有问题, 但是开一台新的 ecs 后, 重新运行又没问题. 此时, 可查看/var/log/cloud-init-output.log文件进行排查, 记录了初始化脚本的运行结果.

删除 ecs

现在任务已经跑起来了, 但是跑完了之后还需要删除自己呀. 查看后发现了deleteInstances方法, 但参数需要instanceId, 如何获得当前运行实例的instanceId呢? 找了一下文档中也有介绍

小提示, 查找语法: instance-Id site:https://help.aliyun.com/ 直接定位目标页面.

访问地址:

# 获取当前实例 instanceId
curl http://100.100.100.200/latest/meta-data/instance-id
# 获取当前实例 regionId
curl http://100.100.100.200/latest/meta-data/region-id

获取当前实例 ID 后, 接下来就简单了, 把自己删除掉就好啦.


通过这种方式执行脚本, 实在是经济又实惠. 有需要的小伙伴不妨一试哦~

------------

原文地址 https://hujingnb.com/archives/663

转载请保留原文连接: 阿里云定时任务并自动释放 | 烟草的香味

guest
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请发表评论。x