如何按指定时间序列运行自动化脚本并完成托管部署?
问题解答:定时执行脚本配置与托管方案
一、定时执行代码修正
你当前的schedule库用法存在两个核心问题:
- 函数传递错误:
do(execute())会立刻执行execute(),并把返回值(None)传给do(),正确写法是传递函数对象do(execute)。 - 不符合依次间隔需求:原代码同时设置多个定时任务,会导致脚本在多个时间点重复执行,而非按「5分钟→20分钟→2小时→12小时→24小时→26小时」的顺序依次触发。
修正后的递归式代码如下,可实现按指定间隔依次执行:
from ray import SMSBot import schedule import time # 定义执行间隔序列(单位:分钟) intervals = [5, 20, 120, 720, 1440, 1560] current_idx = 0 def execute(): global current_idx with SMSBot() as sms: sms.go_to_dashboard("https://sms.rayadvertising.com/login") sms.login_to_dashboard("*****") sms.find_number_section() # 切换到下一个间隔,设置后续任务 if current_idx < len(intervals) - 1: current_idx += 1 schedule.every(intervals[current_idx]).minutes.do(execute) # 启动第一个任务 schedule.every(intervals[0]).minutes.do(execute) # 持续运行调度器(schedule库必需的循环) while True: schedule.run_pending() time.sleep(1)
说明:
- 将
SMSBot上下文管理器移到execute内部,避免长时间持有连接引发资源问题。 - 用列表存储所有间隔,通过索引依次切换下一个定时任务。
- 添加
while True循环维持调度器运行,这是schedule库的必要操作,原代码缺失此部分。
二、脚本托管方案推荐
针对Ubuntu笔记本无法全天开机的情况,推荐以下3种方案:
1. 轻量云服务器
选择主流云厂商的入门级轻量应用服务器(每月几十元),配置足够运行自动化脚本。
部署方式:
- 通过SSH连接服务器,安装Python环境及依赖(如SMSBot相关库)。
- 上传脚本后,用
systemd创建后台服务确保脚本持续运行:
创建/etc/systemd/system/sms-automation.service文件:
执行命令启用服务:[Unit] Description=SMS Automation Script After=network.target [Service] User=your_username WorkingDirectory=/path/to/script ExecStart=/usr/bin/python3 /path/to/script/your_script.py Restart=always [Install] WantedBy=multi-user.target
脚本会随服务器开机自动启动,异常退出时自动重启。sudo systemctl daemon-reload sudo systemctl start sms-automation.service sudo systemctl enable sms-automation.service
2. 无服务器函数(Serverless)
若脚本执行时间短、资源消耗低,可选择云厂商的函数计算服务。
注意:需确认SMSBot是否支持无服务器环境(如依赖浏览器时,需配置无头浏览器及对应依赖层)。
3. 低功耗硬件(如树莓派)
购买入门款树莓派,安装Ubuntu Server系统常年插电运行,每月电费仅几元。
部署方式与云服务器一致,通过SSH管理,用systemd托管脚本即可。
三、额外注意事项
- 不要硬编码登录凭证,建议用环境变量或加密配置文件存储,避免泄露。
- 添加日志记录功能,将执行情况写入文件,方便排查问题。
内容的提问来源于stack exchange,提问作者sakib Ovi
相关产品推荐
相关产品推荐

