zoukankan      html  css  js  c++  java
  • 阿里云定时任务并自动释放

    前言

    最近写了一个爬虫脚本, 脚本跑在一台北京的 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
    ' | 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

  • 相关阅读:
    Sql Server 跨服务器连接
    ASCII码与16进制的互相转换(表)
    c#多线程 Invoke方法的使用
    登陆时验证码的制作(asp.net)
    jQ&js给label
    IT行业的一些专业术语
    html div 加边框样式
    分布式技术 memcached
    分布式技术 webservice
    MVC 绑定 下拉框数据
  • 原文地址:https://www.cnblogs.com/hujingnb/p/15341136.html
Copyright © 2011-2022 走看看