阿里云定时任务并自动释放
前言
最近寫了一個爬蟲腳本, 腳本跑在一臺北京的 ecs 上. 但奈何因某種未知力量, 需要連接代理才能訪問目標(biāo)網(wǎng)站.
本來想著自己搭代理, 但是太貴了, 就暫時擱置了. 直到我發(fā)現(xiàn)了這個:
阿里云香港的服務(wù)器, 一個小時才5分錢. 如果腳本直接跑在香港服務(wù)器上不就可以了咩, 按照這個價格, 我每天使用一個小時, 一個月也就不到兩塊(流量另付).
窺探
我的基本思路是這樣的:
- 北京 ecs 定時任務(wù), 創(chuàng)建并啟動香港 ecs
- 在香港 ecs 上執(zhí)行任務(wù)
- 任務(wù)執(zhí)行完成后, 將香港 ecs 刪除
說干就干, 查了一下阿里云提供的API, 云服務(wù)商確實是方便, 基本所有操作都可以通過API來執(zhí)行. API文檔地址: https://next.api.aliyun.com/api/Ecs
其API文檔上每個語言的每個接口, 都有對應(yīng)的 demo, 這點點個贊.
啟動 ecs
啟動 ecs 方法: runInstances, 可以自定義參數(shù), 不過個人推薦創(chuàng)建一個啟動模板, 比較方便:
其中的UserData參數(shù) 其實就是一個小腳本, 不過不能超過16kb. 自定義數(shù)據(jù)文檔
我們就通過他, 在 ecs 創(chuàng)建之后自動執(zhí)行任務(wù).
通過下面命令, 可查看傳入 ecs 的腳本內(nèi)容(其實在文檔中寫的很清楚了):
curl http://100.100.100.200/latest/user-data
好, 我們啟動的腳本需要執(zhí)行以下操作:
我的腳本大概這樣, 可供參考:
#!/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 # 導(dǎo)入配置文件 echo '$confJson' > /var/workspace/cron/conf.json # 運(yùn)行命令... # 運(yùn)行腳本將自己刪除 php /var/worspace/cron/delete_self.php注意, 這里將刪除自己的腳本單獨(dú)拿出來了, 為什么不再任務(wù)腳本執(zhí)行完成后直接刪除自己呢? 如果因為某種不可知的原因, 任務(wù)腳本掛了, 會導(dǎo)致實例沒有被正常刪除, 這可都是白花花的銀子啊.
如果你遇到UserData有問題, 但是開一臺新的 ecs 后, 重新運(yùn)行又沒問題. 此時, 可查看/var/log/cloud-init-output.log文件進(jìn)行排查, 記錄了初始化腳本的運(yùn)行結(jié)果.
刪除 ecs
現(xiàn)在任務(wù)已經(jīng)跑起來了, 但是跑完了之后還需要刪除自己呀. 查看后發(fā)現(xiàn)了deleteInstances方法, 但參數(shù)需要instanceId, 如何獲得當(dāng)前運(yùn)行實例的instanceId呢? 找了一下文檔中也有介紹
小提示, 查找語法: instance-Id site:https://help.aliyun.com/ 直接定位目標(biāo)頁面.
訪問地址:
curl http://100.100.100.200/latest/meta-data/instance-id
獲取當(dāng)前實例 ID 后, 接下來就簡單了, 把自己刪除掉就好啦.
通過這種方式執(zhí)行腳本, 實在是經(jīng)濟(jì)又實惠. 有需要的小伙伴不妨一試哦~
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的阿里云定时任务并自动释放的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快速排序 java导包_排序算法-快速排
- 下一篇: IntelliJ IDEA的这个接口调试