脚本写好了,怎样稳妥地按时跑在云上?用 pdt 管理定时作业
不少团队都有一批“简单但不能忘”的脚本:夜间同步数据、定期生成报表、扫描账号或导出配置。真正费心的往往不是写脚本,而是决定它该跑在哪里、怎样保存状态、失败后去哪看日志,以及密钥如何进入运行环境。开源项目 pdt(process deploy tool)试图把这些重复的部署决定收进统一约定:把作业代码放在自己的项目中,再部署到 AWS、Azure、Google Cloud,或 Windows Task Scheduler。
它适合已有脚本、想把定时作业纳入版本控制的开发者和运维团队。它不是托管在第三方平台上的调度 SaaS:项目说明称作业资源位于用户自己的云账号,没有 pdt 服务端。仓库采用 MIT 许可证,主要以 Python 实现。需要注意,云端部署使用容器构建流程;本地能运行不等于云账号权限、配额和计费都已准备就绪。
先本地验证,再部署
README 给出的 macOS/Linux 安装路径使用 uv:
uv tool install pdt-cli uv tool update-shell pdt init jobs cd jobs pdt new hello-powershell --from powershell-hello-world cd hello-powershell pdt run pdt deploy pdt logs
这组命令沿用项目 Quick Start。pdt init 建立项目,pdt new 从内置示例创建作业;先用 pdt run 在本机执行,再部署。示例名 hello-powershell 对应 PowerShell 模板,不代表只能运行 PowerShell;README 也支持 Python 脚本。自己的脚本可以替换示例文件,并按项目约定提供配置。
第一次使用时,建议先读项目的 Commands 文档与 Deploying 文档,特别是 pdt deploy 的交互行为:工具会显示资源计划和月度成本估算,再询问是否应用。部署后还会询问是否立即启动一次运行并跟踪日志;这次运行可能发送邮件或写入外部系统,所以应把它当成有副作用的操作。自动化环境中可用 --yes 跳过确认,但非交互时默认不会因此自动启动作业;若要部署后立即运行并跟踪结果,文档提供了 --run 选项。
云平台差异由配置显式表达
每个作业通过 pdt.yml 或 app 的 config.yml 指定平台。官方文档列出 AWS、Azure 和 Google Cloud 三种云端容器运行环境,也支持 Windows Task Scheduler。云端作业使用对应平台的调度、计算、密钥、存储与日志服务,例如 AWS 的 EventBridge Scheduler、Secrets Manager 与 CloudWatch Logs;Azure 和 Google Cloud 则映射到各自服务。Windows 路径运行在本机,使用本地时区并将运行日志写入 Windows Application log。
部署阶段会根据环境选择构建位置:本机 Docker 可用时,可以本机构建镜像并上传;否则云端可使用相应构建服务。配置项 docker-build 支持 auto、local、cloud 三种选择,默认 auto。如果团队要求构建发生在特定环境,应明确设置,而非假设部署工具一定使用本机 Docker。
持久化也值得提前设计。云端执行环境可能是短暂的,pdt 为每个作业提供持续存储目录;应用通过 PDT_STORAGE_URL 使用它。Python 代码可借助 pdt.utils.storage 写文件,需跨运行保留的状态应放入同步状态目录。文档说明 storage.sync() 会锁定状态,避免并发运行覆盖;成功后提交新状态,异常时默认保留上一次成功状态。报表等供人查看的产物则应写入 output。不要把密钥写进代码或镜像,项目文档说明 .env 不会进入云端构建上下文,部署后可用 pdt secrets APP save 同步秘密。
把失败处理当作部署的一部分
部署完成不等于运维闭环完成。可用 pdt runs APP 查看近期运行及退出码,用 pdt logs APP --failed 查最新失败日志;pdt health APP 检查最近一次运行是否成功。对于需要暂停的任务,pdt pause APP 会暂停已部署的计划,之后可用 pdt unpause APP 恢复。删除作业前则应确认数据保留策略:pdt destroy APP 清理部署资源,但作业存储有独立的管理命令,不宜把“销毁运行资源”误解成“所有数据必然删除”。
投入生产前可以按这个清单走一遍:先在测试数据上运行;核对 platform、区域和时区;检查运行身份是否具备最小必要权限;验证密钥没有进入 Git;确认成本估算和资源计划;部署后手动检查一次日志、退出码与告警渠道。尤其是 ETL、账单和账号扫描任务,重跑可能产生重复写入或重复通知,最好让脚本本身具备幂等性。
pdt 的价值不是替团队决定业务逻辑,而是为定时作业提供一套跨平台的部署与运维入口。若你希望代码、配置、日志和状态都可追踪,并且愿意自己管理云账号,它值得在一个低风险作业上试跑;若需求只是单机 cron,或组织不允许工具创建云资源,现有调度器可能更简单。